当我在Queue中放置一个对象时,是否需要创建对象的深层副本,然后放入队列?python多处理队列对象放置安全吗?
2
A
回答
1
如果您可以确保对象只在一个线程中处理,这不是问题。但是,如果你不能,建议使用深层复制。
如果将对象放入队列中,队列对象不会自动执行此操作。
见参考文献
- Multithreading, Python and passed arguments
- Python in Practice: Create Better Programs Using Concurrency... p.154
请记住,对象必须能够被腌(Multiprocessing Basics)
通常更加有用能够通过参数产生一个过程来告诉它做什么工作。与线程不同,要将参数传递给多处理进程,参数必须能够使用pickle序列化。这个例子传递每个工人一个数字,所以输出更有趣一些。
2
put
队列中的操作不会创建对象的副本(或深度副本),因此您在哪里创建深度副本或完全取决于您期望并希望实现的行为。
如果您将对象放入队列并将对象修改为外部并且还希望将更改反映到队列中的对象中,则不要创建深度复制。
否则,请创建一个深层副本,以便在外部进行的更改不会反映在队列中的对象上。
SO上还有一篇相关文章:Python multiprocessing.Queue modifies objects。如果您检查接受的答案,则建议在队列中使用不可变对象(如果不是深度复制,则使用)。
相关问题
- 1. Python多处理队列
- 2. 多处理Python类对象
- 3. 在python中使用多处理时可以安全地使用全局队列吗?
- 4. python多处理队列获取并把
- 5. Python的多处理和队列
- 6. python队列和多处理队列:他们如何表现?
- 7. 是Python多处理.Queue线程安全吗?
- 8. 线程/多处理/队列?
- 9. 多处理池和队列
- 10. 多处理队列已满
- 11. 多处理和队列
- 12. VB/C#:在全球范围内放置可处理对象:这样好吗?
- 13. ActiveMQ安全队列
- 14. 在python多处理中修改对象
- 15. Python:安装多处理
- 16. Python中的任务队列处理
- 17. 不能把对象放在队列上
- 18. 我可以在python中为多处理创建共享的多阵列或列表对象列表吗?
- 19. 访问python中的全局队列对象
- 20. Java队列中的多线程处理
- 21. POSIX消息队列安全
- 22. 的Python 2.7:多处理,队列和加入
- 23. 为什么这个python队列代码处理项目多次?
- 24. 如何清除python中的多处理队列
- 25. 使用队列写入同一文件的Python多重处理
- 26. python在多处理中共享dict()中共享队列()
- 27. 在python的多处理中检查空队列
- 28. Python 3:使用多处理队列进行日志记录
- 29. 如何在Python中使用多处理队列?
- 30. 处理多个对象
我相信对象在被转移到接收过程之前被酸洗(即你不在同一个副本上工作) – thebjorn
@Majid请接受答案并关闭问题。 – ppasler