我有一些如下所示的多处理代码。当我开始这项工作时,一切都很好,我看到我的队列大小迅速减少。然后再慢一点。那么它根本没有取得任何进展。但我仍然可以看到 12 个 python 进程正在运行。
我怀疑 big_hairy_routine 遇到了一些错误,并且进程正在慢慢消失。但是如何查看 async_result 结构以查看底层池进程的状态?
(也有可能我在这里使用了错误的成语。)
import traceback
import multiprocessing
from Queue import Empty
def do_something(q):
item = q.get_nowait()
while item:
try:
big_hairy_routine(item)
except Exception, e:
traceback.print_exc()
sys.exit(1)
try:
item = q.get_nowait()
except Empty:
item = None
manager = multiprocessing.Manager()
q = manager.Queue()
pool = multiprocessing.Pool(processes=10)
for item in (1,2,3,4,5):
q.put(item)
async_result = pool.apply_asnc(do_something, (q,))
while q.qsize > 0:
print "there are %s items in queue" % q.qsize()
if async_result.ready():
print "we're done!"
break
time.sleep(30)