我在 python 中注意到池分配的这种行为。即使我在池中有 20 个进程,当我为 8 个进程执行 map_async 时,我并没有将所有进程都扔掉,而是只执行了 4 个。当这 4 个完成时,它再发送两个,然后当这两个完成时发送一个。
当我向它扔超过 20 个时,它会运行所有 20 个,直到它开始在队列中获得少于 20 个,当上述行为重复时。
我认为这是故意这样做的,但看起来很奇怪。我的目标是在请求进入后立即处理它们,显然这种行为不适合。
使用 python 2.6 和台球来支持 maxtasksperchild
有什么想法可以改进吗?
代码:
mypool = pool.Pool(processes=settings['num-processes'], initializer=StartChild, maxtasksperchild=10)
while True:
lines = DbData.GetAll()
if len(lines) > 0:
print 'Starting to process: ', len(lines), ' urls'
Res = mypool.map_async(RunChild, lines)
Returns = Res.get(None)
print 'Pool returns: ', idx, Returns
else:
time.sleep(0.5)