簡體   English   中英

python 2.7多處理。 另一個pool.apply_async中的pool.apply_async

[英]python 2.7 multiprocessing. pool.apply_async inside another pool.apply_async

python 2.7多處理。 pool.apply_async另一個里面pool.apply_async

我有2個模塊A和B。模塊“ A”聲明了一個大小為100的池,並使用pool.apply_async,了模塊“ B”中的函數“ BX”。 模塊“ B”中的函數“ BX”創建另一個大小為n的池,並使用其pool.apply_async另一個函數。

現在面臨的這個問題是執行過程正好在聲明模塊“ B”中的池時停止/退出。 即在聲明模塊“ B”中的第二個池時,該模塊位於模塊“ A”的第一個池中。

關於在pool.apply_async中執行pool.apply_async的任何解決方案?

您必須執行類似我在下面顯示的操作。 請注意,我使用了自己的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]]

需要注意的是amappathosmap_asyncmultiprocessing 如果你只是想apply_async ,這是apipepathos 然后關閉:

>>> 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM