Python多进程:子进程如何将字典传递回父进程

3

我有一个名为parseContents的子进程函数,使用以下代码进行调用:

def main():
   p = Process(target=parseContents, args=(event.name,))
   p.start()
   p.join()

如何利用multiprocessing模块和Queue方法,使得我可以将parseContents中的变量传回到main函数,在p.join()之后使用?

我已经了解到可以使用以下代码:

  from multiprocessing import Queue
  queue = Queue()
  queue.put( myVar ) #obviously this would be inside parseContents()
  print queue.get( myVar )  #obviously this would be inside main()

在调用parseContents函数后,我是否需要将“queue”变量/实例传递给它,以便子进程知道队列的存在?

如何正确实现父进程和子进程之间的多进程队列,就像上面的main()段落中构建的那样?

1个回答

1
要以这种方式使用队列,您必须在main()中实例化它并将其作为参数传递给parseContents。一旦这样做,您应该能够使用您拥有的代码(在正确的位置)将项目从子进程传递到父进程。
Python文档警告您不要尝试加入子进程,如果队列不为空,请确保在调用join之前获取队列中的所有项。事实上,您甚至可以在不调用join的情况下运行代码,因为queue.get将等待队列中有一个项目。

文档中没有关于删除或清空队列的内容。在调用.join()之前,我该怎么做? - sadmicrowave
我只是想说,你必须调用足够多次的get函数才能将队列中的所有项目取出,然后再调用join函数。 - murgatroid99
哦,明白了!如果我只把一个项目放入队列中,那么我只需要取出一个项目。我明白了,谢谢。 - sadmicrowave
我必须调用p.join才能使它正常工作吗?我的意思是,如果我希望主进程异步运行,并且不必担心来回传递变量,那该怎么办? - sadmicrowave
如果你跳过对join的调用,似乎不会有任何问题。我已经习惯了C语言,在那里你必须调用join。 - murgatroid99
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接