什么是在Python 3中安排和管理多个进程的最佳方法

时间:2014-04-28 16:24:20

标签: python python-3.x

我正在使用Python 3中的项目,该项目涉及从文本文件中读取行,以某种方式操作这些行,然后将所述操作的结果写入另一个文本文件。以串行方式实现该流程是微不足道的。

然而,连续运行每一步需要很长时间(我正在处理几百兆字节/几千兆字节的文本文件)。我想过将这个过程分解成多个实际的系统进程。根据推荐的最佳做法,我将使用Python的multiprocessing库。

理想情况下,应该只有一个Process来读取和写入文本文件。然而,操纵部分是我遇到问题的地方。

当"读者处理"从初始文本文件中读取一行,它将该行放在Queue中。 "操纵过程"然后从Queue中拉出那一行,做他们的事情,然后把结果放到另一个Queue,其中"编写者处理"然后接受并写入另一个文本文件。就目前而言,操纵过程只需检查"阅读器Queue"有数据,如果有,他们get()来自Queue的数据并做他们的事情。但是,这些进程可能在读取器进程运行之前运行,从而导致程序停止。

在您看来,什么是最好的方式"以这种方式安排流程,以便操作流程不会运行,直到读者进程将数据放入Queue,反之亦然,编写进程?我考虑解雇自定义信号,但我不确定这是否是最合适的前进方式。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

如果我是你,我会分开将文件分成易处理的块和计算密集型操作部分的任务。如果那是不可能的(例如,如果某些行由于某种原因不是独立的),那么你可能不得不做一个纯粹的串行实现。

一旦你在单独的文件中有N个块,你就可以为每个块启动你的串行操作脚本N次。然后,将输出组合回一个文件。如果你这样做,不需要队列,你将节省一些工作。

答案 1 :(得分:1)

您正在描述任务队列。 Celery是一个任务队列:http://www.celeryproject.org/