0

ここでSynchronizing Operations デモを実行しようとしています。期待される結果は次のとおりです。

Starting s1
s1 done and ready for stage 2
Starting stage_2[1]
stage_2[1] running
Starting stage_2[2]
stage_2[2] running

しかし、いつか私はこれを手に入れました:

Starting stage_2[2]
stage_2[2] running
Starting stage_2[1]
stage_2[1] running
Starting s1
s1 done and ready for stage 2

Python 2.7.3 と Windows を使用しています。ステージ 2 がステージ 1 の前に実行される理由を知っている人はいますか?

4

1 に答える 1

0

マルチプロセッシングのドキュメントからは、偽のウェイクアップを回避するために何か特別なことを行うかどうかは明らかではありませんが、一般的cond.wait()に、条件付きループなしで呼び出すことには問題があります。

それが問題なら、このようなもの

def stage_2(cond):
    """wait for the condition telling us stage_1 is done"""
    name = multiprocessing.current_process().name
    print 'Starting', name
    with cond:
        while stage < 2:
            cond.wait()
        print '%s running' % name

それを修正します。ここstageには、実際には multiprocessing.Value() などで作成された ctypes オブジェクトが必要です。

于 2013-07-23T17:32:44.870 に答える