2016-04-01 17 views
0

python 2.7 çok işlemcili. Başka bir pool.apply_asyncpython 2.7 çok işlemli. pool.apply_async içinde başka bir pool.apply_async

içinde pool.apply_async I2 modülleri A ve B Modülü 'A' boyutu 100 bir havuz bildirir ve pool.apply_async, modülün 'B' bir işlev 'BX' olarak adlandırılır. 'B' modülündeki 'BX' fonksiyonu, n boyutunda bir başka havuz oluşturur ve pool.apply_async'u kullanarak başka bir işlev çağrılır.

şu anda karşı karşıya am Bu sorun yürütme işlemi sadece 'B' modülünde havuzu ilan etme noktasında/çıkış durduruldu oluyor olmasıdır. yani 'A' modülünün 1. havuzunda bulunan 'B' modülünde 2. havuzu açıklarken.

Pool.apply_async dosyasını pool.apply_async içinde yürütme konusunda herhangi bir çözüm var mı?

+0

, çoklu işlem, Konuyla çalışmıyorsunuz, süreçlerle çalışıyorsunuz :) –

cevap

0

Aşağıda gösterdiğim gibi bir şey yapmalısınız. Daha iyi bir serileştirme sağladığı için multiprocessing (pathos olarak adlandırılır) kendi çatalımı kullandığımı unutmayın, tercümandan çalışmanızı sağlar ve havuzların oluşturulması ve bakımı konusunda daha verimlidir. burada gösterildiği gibi Ancak, iş akışı kabaca aynı olmalıdır: pathos yılında amapmultiprocessing yılında map_async olduğunu

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

Not. Sadece apply_async istediyseniz, pathos numaralı telefondan apipe. Sonra şeyleri kapatmaya: Yani

>>> 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 eşdeğer olan, bu benzeyecektin:

dediğin gibi dizisindeki dişin noktasını var ve ne
>>> 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()