我有一个脚本运行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...
正如您将
queue1
传递给f2
,您还需要传递queue2
。在可以将队列声明为全局队列:
这是有效的:
您的代码并没有返回您所看到的错误,它返回“f2 not defined”,因为您在生成进程
p1
,f2
尚未定义变量。fork的规则是,在创建时,流程必须看到它们使用的变量,即它们必须在当前范围内。在清楚地说,在生成进程时,您从父进程继承当前命名空间。在
相关问题 更多 >
编程相关推荐