私はプールの割り当てのためのこの動作をPythonで確認します。私はプールに20のプロセスを持っていますが、実行するすべてのプロセスを投げるのではなく、8つのプロセスに対してmap_asyncを実行すると、わずか4回しか実行されません。それらの4つが終わると、それは2つを送り、そして2つの終わりが1つを送るのであるとき。マルチプロセッシング - プールの割り当て
私は20以上をスローすると、上記の動作が繰り返されるときにキュー内で20未満になるまで、すべて20を実行します。
これは意図的に行われていると仮定していますが、奇妙に見えます。私の目標は、要求が来てすぐに処理されるようにすることです。明らかにこの動作は適合しません。
maxtasksperchildサポート
私はそれをどのように向上させることができます任意のアイデアをためbilliardでのpython 2.6を使用していますか?
コード:
私は機能function()
を使用したいデータを持っている:私はPythonでマルチプロセッシングを扱う
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)
ありがとうございました。これはスクリプトを改善するのに役立ちました。私は、デフォルトのプール処理を取り除き、あなたの例に基づいて自分自身を実装しました。 – SorinV