私は、プール割り当てのためのPythonでのこの動作に気づきました。プールに20個のプロセスがありますが、たとえば8個のプロセスに対してmap_asyncを実行すると、すべてのプロセスをスローして実行するのではなく、4個しか実行されません。これらの4つが終了すると、さらに2つが送信され、2つが終了すると1つが送信されます。
20を超える値をスローすると、キューで20未満になり始めるまで、20をすべて実行し、上記の動作が繰り返されます。
これは意図的に行われていると思いますが、奇妙に見えます。私の目標は、リクエストが届いたらすぐに処理することですが、明らかにこの動作は適合しません。
maxtasksperchildサポートのためのビリヤードでのPython2.6の使用
どうすればそれを改善できますか?
コード:
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)