0

4 コアの 1 台のマシンで 7 つのワーカー プロセスを実行しています。map_async の結果を待っている間に、このループの選択を誤った可能性があります。

while not result.ready():
    time.sleep(10)
    for out in result.stdout:
        print out
rec_file_list = result.get()

result.stdout実行中の7つのプロセスからのすべての印刷出力で成長し続け、マップを開始したコンソールがハングアップしました. 私の MacBook Pro のアクティビティ モニタは、7 つのプロセスがまだ実行中であり、コントローラを実行しているターミナルがまだアクティブであることを示しています。ここでのオプションは何ですか? プロセスが完了したら、結果を取得する方法はありますか?

4

1 に答える 1

1

私は答えを見つけました:ASyncResultオブジェクトのリモートイントロスペクションは、コントローラーによって「データベースバックエンド」が有効になっている限り、別のクライアントから可能です:

ipcontroller --dictb # or --mongodb or --sqlitedb

次に、新しいクライアント インスタンスを作成し、次の方法で結果を取得できます。

client.get_result(task_id)

task_ids は次の方法で取得できます。

client.hub_history()

また、私が遭遇したバッファ オーバーフローを回避する簡単な方法は、各エンジンの stdout 履歴から最後の数行だけを定期的に出力し、次のようにバッファをフラッシュすることです。

from IPython.display import clear_output
import sys

while not result.ready():
    clear_output()
    for stdout in result.stdout:
        if stdout:
            lines = stdout.split('\n')
            for line in lines[-4:-1]:
                if line:
                    print line
    sys.stdout.flush()
    time.sleep(30)
于 2015-03-08T14:42:12.113 に答える