【发布时间】:2017-05-31 02:56:10
【问题描述】:
当我将对象放入Queue时,是否需要创建对象的深拷贝然后放入队列?
【问题讨论】:
-
我相信对象在被转移到接收进程之前已经被腌制了(即你不是在处理同一个副本)
-
@Majid 请接受答案并关闭问题。
标签: python queue multiprocessing deep-copy
当我将对象放入Queue时,是否需要创建对象的深拷贝然后放入队列?
【问题讨论】:
标签: python queue multiprocessing deep-copy
如果可以保证Object只在一个Thread中处理,这不是问题。但如果不能,建议使用深拷贝。
如果您将对象放入队列对象中,队列对象不会自动执行此操作。
见参考文献
请记住,对象需要能够被腌制 (Multiprocessing Basics)
通常更有用的是能够生成一个带有参数的进程来告诉它要做什么。与线程不同,要将参数传递给多处理进程,该参数必须能够使用 pickle 进行序列化。此示例向每个工作人员传递一个数字,因此输出更有趣。
【讨论】:
Thread 与multiprocessing 没有直接关系。 multiprocessing.Queue(至少在 python2 中)在序列化对象时复制对象,但要注意竞争条件(请参阅其他答案中的链接)。最后,图书链接已损坏,因为它不包含引用的页面。