为什么屏幕IO会在Process.join()

时间:2016-02-23 23:39:18

标签: python multiprocessing

我正在学习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

在多处理完成之前,打印命令似乎被锁定,即使它们在代码中较早出现。为什么是这样?从命令窗口运行它会产生预期的输出(中断后的计数)。

1 个答案:

答案 0 :(得分:0)

Kurt发现了这个问题。在.join()语句之前调用sys.stdout.flush()更正了该行为。输出现在是:

Pool
Sleep
break
count:  1
count:  0