0

我正在尝试在这里运行同步操作演示,预期结果是:

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 回答