あなたは私が下に示しているような何かをしなければなりません。 multiprocessing
という自分のフォーク(pathos
)を使用していることに注意してください。なぜなら、シリアル化機能が向上し、インタープリタから実行できるようになり、プールの作成と保守がより効率的になるからです。ここに示されているようしかし、ワークフローは、ほぼ同じであるべきである:pathos
でamap
はmultiprocessing
でmap_async
あること
>>> import pathos as p
>>> tp1 = p.pools.ThreadPool(100)
>>> tp2 = p.pools.ThreadPool(50)
>>> import itertools as it
>>>
>>> res = tp1.amap(tp2.amap, it.repeat(lambda x:x**2), [range(10)]*5)
>>> ans = res.get()
>>> [v.get() for v in ans]
[[0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]]
注意。 apply_async
がほしいのであれば、apipe
はpathos
になります。そして、物事をシャットダウンする:
だから、
>>> tp1.close()
>>> tp2.close()
>>> tp1.join()
>>> tp2.join()
>>> # pathos has an additional shutdown step to clear the pool cache
>>> tp1.clear()
>>> tp2.clear()
を、apply_async
に相当し、それは次のようになりたい:
>>> tp1 = p.pools.ThreadPool(100)
>>> tp2 = p.pools.ThreadPool(50)
>>> tp1.apipe(tp2.apipe, lambda x:x**2, 10).get().get()
100
>>> tp1.close()
>>> tp2.close()
>>> tp1.join()
>>> tp2.join()
>>> tp1.clear()
>>> tp2.clear()
何スレッド内のスレッドのポイントだ、とあなたが言うように、マルチプロセッシング、スレッドで作業していない、プロセスで作業中です:) –