我这里有一个简单的脚本:
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 one 和 two 返回结果,以便我可以比较输出。 像这样:
1, 100
2, 101
3, 102
4, 103
...
...
100, 200
也许我错过了一些明显的东西,或者它甚至是不可能的。
也许是这样的,但使用生成器:
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
在流程本身中执行此操作将非常棘手。您可以做的是拥有一个单独的过程,该过程仅以接收和打印数据为目标。然后,您可以为每个输出生产者设置一个管道,并且仅在可以从两个过程收集结果时才打印某些内容。
伪代码:
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))