用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,我喜欢。一旦我在我的代码中这样做,我将接受答案,因为我使用的模块有点不同。不完全是和答案,但感谢你告诉我它存在。