首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python多进程输出同一行

Python多进程输出同一行
EN

Stack Overflow用户
提问于 2018-01-16 06:29:15
回答 2查看 379关注 0票数 1

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

代码语言:javascript
运行
复制
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一和二返回的结果,这样我就可以比较输出了。类似于:

代码语言:javascript
运行
复制
1, 100
2, 101
3, 102
4, 103
...
...
100, 200

也许我遗漏了一些显而易见的东西,或者甚至是不可能的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-16 06:49:20

也许像这样,但使用生成器:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-01-16 06:36:33

在进程本身中做这件事是相当棘手的。您可以做的是有一个单独的进程,它的目标只是接收和打印数据。然后,您可以为每个输出生成器设置一个管道,并且仅当您可以从两个过程中收集结果时才打印某些内容。

伪码:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48271576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档