在python中运行进程时逐行打印?

时间:2017-03-29 17:17:19

标签: python loops printing multiprocessing

我最近致力于使用多线程,但遇到了一个问题,多处理似乎是更好的方法。当我运行一个简单的循环计数器函数作为一个过程时,为什么它不循环遍历循环并打印出输出?相反,代码在生成输出之前等待一段时间。有没有办法可以解决这个问题,或者我是不是以这种方式处理流程?

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"

1 个答案:

答案 0 :(得分:0)

我不清楚你所看到的是什么。刚刚在Windows机器上,从交互式控制台运行程序(" DOS框"),我每秒看到value of loopCnt = ...一次,直到程序结束。这就是我的预期。

您正在运行哪个操作系统,如何运行该程序,以及您到底看到了什么?

在大多数(所有?)机器上,如果标准输出(stdout)连接到交互式终端,则它是行缓冲的。这意味着每次命中行边界时都会强制显示输出。对于其他类型的输出设备,它可能使用其他类型的缓冲,这可能会导致延迟。

要尝试的东西:首先添加

import sys

靠近顶部,然后添加

sys.stdout.flush()

之后

print("value of loopCnt = {}".format(loopCnt))

这应该告诉我们您是否遇到输出缓冲问题。