【问题标题】:How to combine multiple while True function processes?如何组合多个while True函数进程?
【发布时间】:2015-08-14 23:44:53
【问题描述】:

我对编程和 python 很陌生,你能帮我写一下我写的代码吗?我不知道如何让它工作。我必须为此使用课程吗?另外如何在多个函数中使用相同的变量?我需要多处理吗?

这是我的测试代码:

from time import sleep
from multiprocessing import Process

def p1():
    while True:
        a = 1+1
        sleep(1)

def p2():
    while True:
        b = 1+1
        sleep(1)

def p3():
    while True:
        c = a+b
        print c
        sleep(1)

try:
    a1 = Process(target = p1)
    a2 = Process(target = p2)
    a3 = Process(target = p3)

    a1.start()
    a2.start()
    a3.start()

它说我在最后一行有一个无效的语法,它是空的。但是我很确定即使没有语法我的代码也不会工作,你能帮忙吗?有什么可以改变的?

【问题讨论】:

  • 你有一个语法错误,因为在try之后必须有一些except。
  • "我需要多处理吗?"要看。你想达到什么目标?
  • (1) p1 和 p2 函数将无限运行。这可能不是你想要的。 (2) 在一个函数中定义的变量(例如p1 中的a)是该函数的局部变量;因此,p3 不会知道任何关于a 和b 的信息,并且会因为这些变量未定义而失败。 (3)您的try-except不完整,其他人指出。
  • 感谢您的回复。 @tobias_k 我想在每个函数中进行算法或一些计算,然后将所有这些函数输出组合起来。好像还是用class no比较好?

标签: python function python-2.7 while-loop python-multiprocessing


【解决方案1】:

如果不知道您到底想用该代码实现什么,很难说清楚,但也许您不需要进程或线程。您是否尝试过生成器函数?

def p1(a=0):
    while True:
        yield a
        a = a + 1

def p2(b=0):
    while True:
        yield b
        b = b + 1

def p3(a, b):
    c = a + b
    print c

a_gen = p1()
b_gen = p2(3)
for _ in range(5):
    a = next(a_gen)
    b = next(b_gen)
    p3(a, b)

这将使p1 和p2 从它们各自的算法中生成连续值,并将它们返回以由p3 组合。 (假设 p2 所做的事情与 p1 不同;否则您可以对两者使用相同的生成器函数。)总而言之,这可能比使用不同的线程和由这些线程操作的一些全局状态要干净得多。

【讨论】:

  • 成功了,非常感谢!!!我稍微更改了您的代码,并在函数中添加了我的算法,并根据需要将它们组合在一起。再次感谢@tobias_k。
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 2015-04-02
  • 2019-01-12
  • 2021-01-06
相关资源
最近更新 更多