从现象认池的毛病
真机上四种现象各对应一种毛病,把现象和毛病配对,打印四个字母: signs = { "结果之和每次不同": "A", "程序永远不退出": "B"
把它跑起来看结果
场景:~/pool/跑.py 用 ThreadPoolExecutor 处理一批任务、打印「结果之和 S」。 任务:把它跑起来,运行 ~/check(它会自己再跑几次核对结果之和)。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里
一共提交了几个任务
场景:~/pool/跑.py 对一个列表里的每个元素提交一个任务。对照表列了八个数。 任务:读代码算出一共提交了多少个任务(那个列表的长度或 range 的范围),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机上操作。可
结果之和是多少
场景:~/pool/跑.py 对 0..N-1 每个算一个值(代码里写了怎么算),结果求和。对照表列了八个数。 任务:读代码或跑一次,算出结果之和,到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里的任
max_workers 是几
场景:~/pool/跑.py 建池时写了 max_workers。对照表列了八个数。 任务:读代码找出池的 max_workers(同时最多几个线程在跑),到对照表里查那个数对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目
给收结果加把锁
场景:~/pool/坏.py 几个 worker 把结果 append 到同一个列表、没加锁(还有个读-睡-写的累加),跑几次结果之和忽多忽少。说明写了应有的和。 任务:给收结果那几行加 threading.Lock(with LOCK:
让程序能结束
场景:~/pool/坏.py 是手写池,几个 worker 是 while True,提交完之后没放毒丸,程序永远不退出(~/复现.sh 会看到卡住)。 任务:提交完后往队列放和 worker 一样多的毒丸(None),worker 取到就
第一个结果是谁
场景:~/pool/单.py 用 map 对一个列表按序处理(map 结果按输入顺序)。对照表列了八个值。 任务:运行它,看 map 的第一个结果(对应列表第一个元素,顺序确定),到对照表里查那个值对应的标记。 可操作范围:只在分给你的这台
交付:用线程池处理一批
场景:要交付一个用线程池处理批量任务的程序,说明写了任务个数、worker 数。 任务:写 ~/pool/答.py:用 ThreadPoolExecutor(max_workers=M) 对 0..N-1 每个算平方(x*x),求所有结果之
线程池开多大合适
线程池的大小(max_workers)该开多大,主要看【0】。