1

以下のようなマルチプロセッシングコードが少しあります。このジョブを開始すると、すべてがうまくいき、キューのサイズが急速に減少していることがわかります。それからもう少しゆっくり。それからは、まったく進んでいません。しかし、まだ 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)
4

0 に答える 0