如何缓冲multiprocessing.Process内部和外部函数的所有print()?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何缓冲multiprocessing.Process内部和外部函数的所有print()?相关的知识,希望对你有一定的参考价值。
我对其中包含多个print()
指标的某些任务使用多处理,因此我可以看到该进程如何在cmd中开始/工作/结束。但是,有些任务更快/更慢,所以print()
命令是混乱的。我需要找到一种方法,如何在过程结束时立即显示所有print()
。
简化示例:
from multiprocessing import Process
from time import sleep
def runner(px_id):
print('Start'+str(px_id))
if px_id > 1:
sleep(2)
elif px_id == 1:
sleep(5)
print('Middle'+str(px_id))
if px_id > 1:
sleep(2)
elif px_id == 1:
sleep(5)
print('End'+str(px_id))
if __name__ == '__main__':
px_list = [1, 2, 3]
for px in px_list:
p = Process(target=runner, args=(px,))
p.start()
如果我现在运行此代码,我会收到:
Start1
Start2
Start3
Middle2
Middle3
End2
End3
Middle1
End1
虽然我需要这样的东西:
Start2
Middle2
End2
Start3
Middle3
End3
Start1
Middle1
End1
我仍然需要进程异步(所以不能使用join()
),但要在进程结束时打印所有print()。感谢任何建议:)
UPD:使用数组缓冲功能消息是一个很好的解决方案,仍需要一些缓冲外部函数解决方案的帮助。我的意思是,如果我在其他函数中使用某些函数我不能手动缓冲所有print()
,所以寻找一些更复杂的解决方案:)
答案
一种选择是让每个实例在内部缓冲区中缓冲输出。然后在最后输出它。您可以让主线程继续并将每个已启动的进程保存在数组中。然后等待所有三个完成,最后从阵列中的每个进程中获取内部缓冲区并连续打印它们。
以上是关于如何缓冲multiprocessing.Process内部和外部函数的所有print()?的主要内容,如果未能解决你的问题,请参考以下文章