在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可能会把事情弄糊涂;-)如果你的问题现在解决了,你应该“接受”答案;请看这里: