python条件等待和notify_all

时间:2013-07-23 17:14:05

标签: python multithreading conditional-statements

我正在尝试运行同步操作演示here,预期结果为:

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在stage1之前执行?

1 个答案:

答案 0 :(得分: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对象。