Python多处理队列失败

use*_*817 9 python queue multiprocessing

我创建了100个子进程

proc_list = [
    Process(target = simulator, args=(result_queue,))
    for i in xrange(100)]
Run Code Online (Sandbox Code Playgroud)

并开始他们

for proc in proc_list: proc.start()
Run Code Online (Sandbox Code Playgroud)

在进行一些处理之后,每个进程都会将result_queue(multiprocessing.Queue的实例)10000个元组放入其中.

def simulate(alg_instance, image_ids, gamma, results,
                     simulations, sim_semaphore):
  (rs, qs, t_us) =  alg_instance.simulate_multiple(image_ids, gamma,
                                             simulations)
  all_tuples = zip(rs, qs, t_us)
  for result in all_tuples:
    results.put(result)
  sim_semaphore.release()
Run Code Online (Sandbox Code Playgroud)

我应该(?)在队列中获得1000000个元组,但经过各种运行后我得到这些(样本)大小:14912 19563 12952 13524 7487 18350 15986 11928 14281 14282 7317

有什么建议?

buk*_*zor 19

我对多处理问题的解决方案几乎总是使用Manager对象.虽然暴露的接口是相同的,但底层实现更简单,并且具有更少的错误.

from multiprocessing import Manager
manager = Manager()
result_queue = manager.Queue()
Run Code Online (Sandbox Code Playgroud)

尝试一下,看看它是否无法解决您的问题.

  • 我开始失去多处理的神经.问题,设想我一定犯了一些错误,但没有真正的改变,只是将它与manager.Queue交换,它开始完美地工作:\ - 感谢一堆建议 (2认同)

tra*_*ing 5

多处理.Queue在其文档中被称为线程安全的.但是当您使用Queue进行进程间通信时,它应该与multiprocessing.Manager()一起使用.Queue()