【问题标题】:Is python multiprocessing Queue safe for object put?python multiprocessing Queue对于对象放置是否安全?
【发布时间】:2017-05-31 02:56:10
【问题描述】:

当我将对象放入Queue时,是否需要创建对象的深拷贝然后放入队列?

【问题讨论】:

  • 我相信对象在被转移到接收进程之前已经被腌制了(即你不是在处理同一个副本)
  • @Majid 请接受答案并关闭问题。

标签: python queue multiprocessing deep-copy


【解决方案1】:

如果可以保证Object只在一个Thread中处理,这不是问题。但如果不能,建议使用深拷贝。

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

见参考文献

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

通常更有用的是能够生成一个带有参数的进程来告诉它要做什么。与线程不同,要将参数传递给多处理进程,该参数必须能够使用 pickle 进行序列化。此示例向每个工作人员传递一个数字,因此输出更有趣。

【讨论】:

  • 当 OP 使用多处理时这是否相关?
  • 什么意思?博客文章和书页指的是深拷贝的问题,而不仅仅是多处理。
  • 对不起,我对第一个链接的多线程和处理的可互换使用感到困惑..
  • Threadmultiprocessing 没有直接关系。 multiprocessing.Queue(至少在 python2 中)在序列化对象时复制对象,但要注意竞争条件(请参阅其他答案中的链接)。最后,图书链接已损坏,因为它不包含引用的页面。
  • @user1071847 哪个链接坏了?我可以访问所有这些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 2017-02-17
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多