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

在python中运行进程时逐行打印?,python,loops,printing,multiprocessing,Python,Loops,Printing,Multiprocessing,我最近致力于使用多线程,但遇到了一个问题,多线程似乎是更好的方法。当我作为一个进程运行一个简单的循环计数器函数时,为什么它不遍历循环并打印输出呢?相反,代码在生成输出之前等待一段时间。有没有办法解决这个问题,或者我是不是一直在用这种方式处理流程 import multiprocessing, time def loop_process(process_name): loopCnt = 0 print "\nstarting {}".format(process_name)

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

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操作系统”)运行程序,我每秒看到loopCnt=…的值一次,直到程序结束。这正是我所期望的

你在哪个操作系统下运行,你是如何运行程序的,你到底看到了什么

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

要尝试的东西:首先添加

import sys
靠近顶部,然后添加

sys.stdout.flush()
在你

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

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

我不清楚您看到了什么。刚才在一个Windows操作系统上,从一个交互式控制台(“DOS操作系统”)运行程序,我每秒看到loopCnt=…的值一次,直到程序结束。这正是我所期望的

你在哪个操作系统下运行,你是如何运行程序的,你到底看到了什么

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

要尝试的东西:首先添加

import sys
靠近顶部,然后添加

sys.stdout.flush()
在你

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

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

谢谢,我补充了这一点,它工作正常。我也在命令提示符下运行了该程序(不包括sys.stdout.flush()),得到了可预测的行为。Sypder IDEAh中使用的控制台一定出了问题,是的,IDE可能会把事情弄糊涂;-)如果你的问题现在解决了,你应该“接受”答案;请在这里阅读:谢谢,我补充了这一点,效果很好。我也在命令提示符下运行了该程序(不包括sys.stdout.flush()),得到了可预测的行为。Sypder IDEAh中使用的控制台一定出了问题,是的,IDE可能会把事情弄糊涂;-)如果你的问题现在解决了,你应该“接受”答案;请看这里: