Python多进程队列在对象放置时是否安全?

12

当我将对象放入Queue中,是否需要创建深层副本并将其放入Queue中?


2
我相信在对象传输到接收进程之前,它已经被封存了(即你不是在同一份副本上工作)。 - thebjorn
@Majid 请接受一个答案并关闭问题。 - ppasler
1个回答

2

如果您可以确保该对象仅在一个线程中处理,那么这不是问题。但如果您不能,建议使用深层复制。

如果您将对象放入队列中,则队列对象不会自动执行此操作。

请参阅Refs

请记住,对象需要能够被pickled (Multiprocessing Basics)

通常更有用的是能够使用参数生成进程,并告诉它要做什么工作。与线程不同的是,要向 multiprocessing Process 传递参数,必须能够使用 pickle 对其进行序列化。此示例向每个 worker 传递了一个数字,因此输出会更有趣一些。


1
当原始帖使用多进程时,这是否相关? - thebjorn
你是什么意思?博客文章和书页都涉及到深拷贝的问题,而不仅仅是普通的多进程。 - ppasler
1
抱歉,我被第一个链接中多线程和处理的可互换使用所困惑了。 - thebjorn
Thread 对于 multiprocessing 不是直接相关的。在 Python2 中,multiprocessing.Queue 会复制对象,因为它需要对其进行序列化,但要注意竞争条件(请参见其他答案中的链接)。最后,书籍链接已经失效,因为它不包含所引用的页面。 - user1071847
@user1071847 哪个链接失效了?我可以访问它们中的所有链接。 - ppasler
@ppasler:实际上,关于《Python 实战》的链接并没有真正损坏,但它仅是书籍摘录,感兴趣的页面未包含在内。 - user1071847

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