用python一次输出一个进程
我正在使用用python一次输出一个进程,python,multiprocessing,stdout,Python,Multiprocessing,Stdout,我正在使用多处理下的池来做一些事情 def my_func(...): #Different processes can take different time print a, b, c #Value that I calculated above. (includes 2 new-lines) 在某些情况下,某个过程的a、b、c值没有一起打印。有没有办法避免这种情况?有谁能解释一下这里发生了什么,以及如何避免 我的理解是,如果我删除了印刷品中的所有换行,并在最后只保留一行,
多处理
下的池
来做一些事情
def my_func(...):
#Different processes can take different time
print a, b, c #Value that I calculated above. (includes 2 new-lines)
在某些情况下,某个过程的a、b、c值没有一起打印。有没有办法避免这种情况?有谁能解释一下这里发生了什么,以及如何避免
我的理解是,如果我删除了印刷品中的所有换行,并在最后只保留一行,应该可以解决问题。(问题是,它不是每次都可以复制的,所以我还在测试)
是否有一种方法可以让
sys.stdout
专门用于一个进程,然后在我将内容打印到stdout
时释放它?也许在运行程序之前设置此变量会对您有所帮助,它会强制python在每次写入后刷新到stdout:
export PYTHONUNBUFFERED=1
另请参见:您可以使用
多处理.Lock
来序列化打印。在主程序中创建公共锁,并将相同的锁传递给所有子进程。例如:
#!python3
from multiprocessing import Process,Lock
import time
import sys
def test(n,lock):
with lock:
for i in range(20):
print(n,end='')
sys.stdout.flush()
time.sleep(.01) # needed some delay or ran too fast and didn't mix output.
print()
if __name__ == '__main__':
lock = Lock()
jobs = [Process(target=test,args=(n,lock)) for n in range(5)]
for job in jobs:
job.start()
for job in jobs:
job.join()
带锁的:
注释掉:
003023120134201342013420314203140231402134203140231420134021342031402134201342013420314203142
1342
14
4
如文所述:
00000000000000000000
11111111111111111111
44444444444444444444
22222222222222222222
33333333333333333333
先把它们连接起来怎么样?像
“”。连接([a,b,c])
,然后打印结果字符串。@lgonato,问题是包含换行符的a,b和c的值。这不会解决问题的,对吧?谢谢@Mark,我喜欢。一旦我在我的代码中这样做,我将接受答案,因为我使用的模块有点不同。不完全是和答案,但感谢你告诉我它存在。