python多进程将字典从子进程传回父进程

3 投票
1 回答
2410 浏览
提问于 2025-04-17 08:43

我有一个子进程函数(叫做parseContents),它是通过以下代码被调用的:

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

我想利用多进程模块和队列方法,怎么才能把一个变量从parseContents函数传回主程序,以便在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会一直等到队列里有东西为止。

撰写回答