Python多进程输出相同的行

时间:2018-01-15 22:29:15

标签: python multiprocessing

我这里有一个简单的脚本:

from multiprocessing import Process

def one():
    x = 1
    while x < 100:
        x +=1
        print(x)


def two():
    y = 100
    while y < 200:
        y += 1
        print(y)


if __name__=='__main__':
     p1 = Process(target = one)
     p1.start()
     p2 = Process(target = two)
     p2.start()

它正常工作并打印出一个数字列表。

我一直在寻找,但到目前为止还没有找到任何答案。我想知道是否有可能在同一行上以这样的def一次和两次返回打印结果,所以我可以比较输出。类似的东西:

1, 100
2, 101
3, 102
4, 103
...
...
100, 200

也许我错过了一些明显或甚至不可能的东西。

2 个答案:

答案 0 :(得分:1)

在流程本身中执行它会非常棘手。你可以做的是有一个单独的过程,其目的只是接收和打印数据。然后,每个输出生成器可以有一个管道,只有在可以从两个进程中收集结果时才打印。

伪代码:

def collector(p1, p2):
    for p1_out, p2_out in wait_for(p1, p2):
        print(p1_out, p2_out)

def one(out_pipe):
   for x in range(1, 100):
       out_pipe.send(x)

def two....

p1_writer, p1_reader = Pipe()
p2_writer, p2_reader = Pipe()
spawn(one, p1_writer)
spawn(two, p2_writer)
spawn(collector, (p1_reader, p2_reader))

答案 1 :(得分:1)

也许是这样但是使用发电机:

def one():
    x = 1
    while x < 100:
        yield x
        x +=1


def two():
    y = 100
    while y < 200:
        yield y
        y += 1


if __name__=='__main__':
     p1 = one()
     p2 = two()

     for x, y in zip(p1, p2):
         print x, y