生产者一共产出几个
场景:~/pc/跑.py 里生产者在一个循环里产出数据。对照表列了八个数。 任务:读代码算出生产者一共产出多少个数据(看循环的范围),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里的任何东西,不要动
补上锁,别丢数据
场景:~/pc/坏.py 用一个普通 list 当队列、多个消费者直接 append 到一个共享结果 list(都没锁),跑几次消费总数忽多忽少。说明写了应有的总数。 任务:把它改对(用 queue.Queue,或给共享结果加 thread
让空队列的消费者等,别报错
场景:~/pc/坏.py 的消费者用 if 队列非空: pop 取数据,多个消费者时偶尔对空 pop 报 IndexError。 任务:改成「空了就等」的取法(用 queue.Queue 的阻塞 get,或条件变量的 wait_for),让
加毒丸让程序能停
场景:~/pc/坏.py 的消费者是 while True,生产完之后消费者还在等新数据,程序永远不退出(~/复现.sh 会看到它卡住)。 任务:生产完后往队列放和消费者一样多的毒丸(哨兵,如 None),消费者取到毒丸就退出;让程序处理完
消费者第一个处理的是谁
场景:~/pc/单.py 是一个生产者、一个消费者、先进先出队列,生产者按说明里的顺序放。对照表列了八个值。 任务:运行它,看消费者第一个处理的是哪个值(单生产单消费 + FIFO,顺序是确定的),到对照表里查那个值对应的标记。 可操作范围
生产的数字加起来是多少
场景:~/pc/跑.py 的生产者产出一串数字(从 0 到某个数)。对照表列了八个数。 任务:读代码算出所有生产出来的数字之和(0+1+…),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里的任何东西
交付:一个完整的生产者消费者
场景:要交付一个生产者消费者程序,说明里写了生产个数、消费者个数。 任务:写 ~/pc/答.py:用 queue.Queue;1 个生产者产出说明里那么多个数据、放进队列;起说明里那么多个消费者线程处理;生产完放对应数量的毒丸;主线程 jo
队列积压先查什么
一个生产者消费者程序内存越用越多、疑似队列积压,先查【0】。
从现象认积压的原因
把四种现象和原因配对,打印四个字母: signs = { "队列长度一直涨": "A", "换成有界后生产者变慢了": "B", &qu
积压有多大
场景:~/积压/日志.txt 记了程序运行时每秒的队列长度(一行一个数)。对照表列了八个数。 任务:找出队列长度的最大值(积压峰值),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里的任何东西,不要动