交付:一个完整的生产者消费者

交付:一个完整的生产者消费者

场景:要交付一个生产者消费者程序,说明里写了生产个数、消费者个数。 任务:写 ~/pc/答.py:用 queue.Queue;1 个生产者产出说明里那么多个数据、放进队列;起说明里那么多个消费者线程处

阅读更多 →
生产的数字加起来是多少

生产的数字加起来是多少

场景:~/pc/跑.py 的生产者产出一串数字(从 0 到某个数)。对照表列了八个数。 任务:读代码算出所有生产出来的数字之和(0+1+…),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这

阅读更多 →
消费者第一个处理的是谁

消费者第一个处理的是谁

场景:~/pc/单.py 是一个生产者、一个消费者、先进先出队列,生产者按说明里的顺序放。对照表列了八个值。 任务:运行它,看消费者第一个处理的是哪个值(单生产单消费 + FIFO,顺序是确定的),到

阅读更多 →
加毒丸让程序能停

加毒丸让程序能停

场景:~/pc/坏.py 的消费者是 while True,生产完之后消费者还在等新数据,程序永远不退出(~/复现.sh 会看到它卡住)。 任务:生产完后往队列放和消费者一样多的毒丸(哨兵,如 Non

阅读更多 →
让空队列的消费者等,别报错

让空队列的消费者等,别报错

场景:~/pc/坏.py 的消费者用 if 队列非空: pop 取数据,多个消费者时偶尔对空 pop 报 IndexError。 任务:改成「空了就等」的取法(用 queue.Queue 的阻塞 ge

阅读更多 →
补上锁,别丢数据

补上锁,别丢数据

场景:~/pc/坏.py 用一个普通 list 当队列、多个消费者直接 append 到一个共享结果 list(都没锁),跑几次消费总数忽多忽少。说明写了应有的总数。 任务:把它改对(用 queue.

阅读更多 →
生产者一共产出几个

生产者一共产出几个

场景:~/pc/跑.py 里生产者在一个循环里产出数据。对照表列了八个数。 任务:读代码算出生产者一共产出多少个数据(看循环的范围),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机

阅读更多 →
把它跑起来看结果

把它跑起来看结果

场景:~/pc/跑.py 是一个完整的生产者消费者程序(用 queue.Queue + 线程),说明里写了生产多少个。 任务:把它跑起来,看它打印「消费了 N 个」,运行 ~/check(它会自己再跑

阅读更多 →
从现象认队列的毛病

从现象认队列的毛病

真机上四种现象各对应一种毛病。把现象和毛病配对,打印四个字母: signs = { "消费总数比生产少": "A", "程序永远不退出

阅读更多 →
真机上怎么验它对了

真机上怎么验它对了

真机上确认一个生产者消费者程序「对了」,最靠谱的做法是【0】。

阅读更多 →