我正在编写一个将使用 python 的多处理和线程模块的脚本。为了您的理解,我产生了尽可能多的内核可用的进程,并且在每个进程中我启动了例如 25 个线程。每个线程从一个消费input_queue并产生一个output_queue。对于队列对象,我使用multiprocessing.Queue.
在我的第一次测试之后,我遇到了死锁,因为负责提供和刷新队列的线程挂了。一段时间后,我发现我可以用它Queue().cancel_join_thread()来解决这个问题。
但由于数据丢失的可能性,我想使用: multiprocessing.Manager().Queue()
现在的实际问题是:为每个队列使用一个管理器对象是否更好?或者我应该创建一个管理器并从同一个管理器对象中获取两个问题?
# One manager for all queues
import multiprocessing
manager = multiprocessing.Manager()
input_queue = manager.Queue()
output_queue = manager.Queue()
...Magic...
# As much managers as queues
manager_in = multiprocessing.Manager()
queue_in = manager_in.Queue()
manager_out = multiprocessing.Manager()
queue_out = manager_out.Queue()
...Magic...
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助。