我最近致力于使用多线程,但遇到了一个问题,似乎多处理是更好的方法。当我将一个简单的循环计数器函数作为一个进程运行时,为什么它不循环访问并打印出输出?相反,代码在生成输出之前等待设定的时间量。有没有办法解决这个问题,或者我是否以这种方式处理流程?
import multiprocessing, time
def loop_process(process_name):
loopCnt = 0
print "nstarting {}".format(process_name)
for loopCnt in range(15):
print("value of loopCnt = {}".format(loopCnt))
loopCnt += 1
time.sleep(1)
print('stopping {}'.format(process_name))
if __name__ == '__main__':
L00P_process = multiprocessing.Process(target=loop_process, args=('L00P_process',))
L00P_process.start()
L00P_process.join()
print('processes stopped')
print "Exiting Main"
我不清楚你看到了什么。 在刚才的Windows盒子上,从交互式控制台("DOS盒子"(运行程序,我每秒看到一次value of loopCnt = ...
,直到程序结束。 这就是我所期望的。
您在哪个操作系统下运行,您如何运行程序,以及您到底看到了什么?
在大多数(所有?(机器上,如果标准输出(stdout
(连接到交互式终端,则它是行缓冲的。 这意味着每次命中线边界时都会强制显示输出。 对于其他类型的输出设备,它可能会使用其他类型的缓冲,这可能是延迟的原因。
尝试:首先添加
import sys
在顶部附近,然后添加
sys.stdout.flush()
在您的之后
print("value of loopCnt = {}".format(loopCnt))
这应该告诉我们您是否遇到输出缓冲问题。