未定义第二个队列[python]

2024-10-04 05:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本运行3个进程。进程1将数据传递给进程2,然后进程2将数据传递给进程3。当我把数据放到queue2时,出现“Global name”queue2“未定义”的错误,我现在被这个错误卡住了。。。在

if __name__ == '__main__':

queue1 = mp.Queue()
queue2 = mp.Queue()

p1 = mp.Process(target=f2, args=(queue1,))
p1.start()

p2 = mp.Process(target=f3, args=(queue2,))
p2.start()

f1()

def f1():
    # do something to a get x
    queue1.put(x)
def f2(q):
    a = q.get()
    # do something to a, to produce b
    queue2.put(b) # error happens here: Global name "queue2" is not defined
def f3(q):
    c = q.get()
    # keeping processing c...

Tags: to数据nametargetgetqueue进程def
3条回答

正如您将queue1传递给f2,您还需要传递queue2。在

可以将队列声明为全局队列:

def f2(q):
    global queue2
    a = q.get()
    queue2.put(b)

这是有效的:

import multiprocessing as mp

queue1 = mp.Queue()
queue2 = mp.Queue()


def f1(q):
    x = 5
    # do something to a get x
    q.put(x)

def f2(in_queue, out_queue):
    a = in_queue.get()
    b = a + 2
    # do something to a, to produce b
    out_queue.put(b) 

def f3(q):
    c = q.get()
    print c

f1(queue1)

p1 = mp.Process(target=f2, args=(queue1, queue2))
p1.start()

p2 = mp.Process(target=f3, args=(queue2,))
p2.start()

您的代码并没有返回您所看到的错误,它返回“f2 not defined”,因为您在生成进程p1f2尚未定义变量。fork的规则是,在创建时,流程必须看到它们使用的变量,即它们必须在当前范围内。在

清楚地说,在生成进程时,您从父进程继承当前命名空间。在

相关问题 更多 >