我正在尝试运行同步操作演示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之前执行?
答案 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对象。