我最近致力于使用多线程,但遇到了一个问题,多处理似乎是更好的方法。当我运行一个简单的循环计数器函数作为一个过程时,为什么它不循环遍历循环并打印出输出?相反,代码在生成输出之前等待一段时间。有没有办法可以解决这个问题,或者我是不是以这种方式处理流程?
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"
答案 0 :(得分:0)
我不清楚你所看到的是什么。刚刚在Windows机器上,从交互式控制台运行程序(" DOS框"),我每秒看到value of loopCnt = ...
一次,直到程序结束。这就是我的预期。
您正在运行哪个操作系统,如何运行该程序,以及您到底看到了什么?
在大多数(所有?)机器上,如果标准输出(stdout
)连接到交互式终端,则它是行缓冲的。这意味着每次命中行边界时都会强制显示输出。对于其他类型的输出设备,它可能使用其他类型的缓冲,这可能会导致延迟。
要尝试的东西:首先添加
import sys
靠近顶部,然后添加
sys.stdout.flush()
之后
print("value of loopCnt = {}".format(loopCnt))
这应该告诉我们您是否遇到输出缓冲问题。