python 2.7多处理。 pool.apply_async在另一个pool.apply_async中

时间:2016-04-01 12:45:30

标签: python multithreading python-2.7 multiprocessing pool

python 2.7多处理。 pool.apply_async位于另一个pool.apply_async

我有2个模块A和B. 模块' A'声明一个大小为100的池,并使用pool.apply_async,函数' BX'来自模块' B'叫做。 功能' BX'在模块' B'创建另一个大小为n的池,并使用其pool.apply_async调用另一个函数。

现在面临的问题是执行过程正在模块“B'”中声明池的时候停止/退出。即在模块中声明第二个池时' B'这是在模块的第一个池内' A'。

在pool.apply_async中执行pool.apply_async的任何解决方案?

1 个答案:

答案 0 :(得分:0)

你必须做一些类似于我在下面展示的内容。请注意,我使用自己的multiprocessing分支(称为pathos),因为它提供了更好的序列化,使您能够从解释器运行,并且在创建和维护池时更有效。但是,工作流程应与此处显示的大致相同:

>>> 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]]

请注意amap中的pathos map_async位于multiprocessing 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() ,它看起来像这样:

NSDateComponents