Python进程没有加入

use*_*496 6 python multiprocessing python-multithreading python-2.7

我无法粘贴我的代码片段,所以我将解释方案1.我有一个大约50000个股票的列表,需要一些估价2.这些股票在MultiProcess.Queue 3.我创建多个流程,每个流程将从队列中取出一批50个并做一​​些事情.4.在主线程中,我有一张看起来像这样的支票

 anymore_to_process = True

 while anymore_to_process:
     if (stock_queue.qsize() == 0):
         anymore_to_process = False

for jobs in stock_jobs:
    jobs.join()
Run Code Online (Sandbox Code Playgroud)
  1. 但是,当我处理50000条记录时,这似乎不起作用.如果我处理500股,这个工作正常.

我究竟做错了什么?当我处理大量股票时,为什么流程没有加入.

我知道如果不看我的代码就很难回答.....但如果你能给我一些指示,那将非常有帮助.

use*_*496 8

问题已解决 - 从@dano 的问题中得到了提示。我确实在写另一个队列,它阻塞了进程。我把它拿出来,问题解决了。

  • 发生这种情况是因为当大量数据被推入时,`Queue` 在内部使用了一个缓冲区。写入 `Queue` 的进程在缓冲区被刷新之前无法退出,直到你开始从 `Queue` 中取出东西时才会退出。因此,由于您在从正在写入的“队列”对象中提取任何内容之前尝试“加入”所有进程,因此它们无法退出,因此“加入”挂起。您可以通过在对进程调用“join”之前排空“Queue”来解决该问题。 (18认同)
  • 我有一个类似的问题,我正在使用一个队列,所以子进程可以将结果报告回主进程,但是在所有进程返回之前,这个队列不会被清空,因为你所说的,他们不会清空。所以我使用队列的 `join` 方法(另一个由子进程使用的队列)而不是进程的 `join` 方法 - 但是没有其他方法可以刷新缓冲区吗? (2认同)