我正在学习Python多处理库,并注意到这种奇怪的{to me}行为。我在Atom中使用带有Python 2.7的Windows和Atom Runner脚本执行包。鉴于此代码:
import multiprocessing
import time
def f(name):
time.sleep(1)
print 'count: ', name
if __name__ == '__main__':
cnt = 0
print 'Sleep'
time.sleep(1)
while 1:
p1 = multiprocessing.Process(target=f, args=(cnt,))
p1.start()
cnt+=1
if cnt==2:
print 'break'
break
p1.join()
输出如下:
count: 0
count: 1
Sleep
break
在多处理完成之前,打印命令似乎被锁定,即使它们在代码中较早出现。为什么是这样?从命令窗口运行它会产生预期的输出(中断后的计数)。
答案 0 :(得分:0)
Kurt发现了这个问题。在.join()语句之前调用sys.stdout.flush()更正了该行为。输出现在是:
Pool
Sleep
break
count: 1
count: 0