如何在保持输入和输入顺序的同时处理多个任务输出?

时间:2014-12-03 20:07:33

标签: python parallel-processing queue gevent

目前,有一个使用gevent的Python项目提交执行套接字调用的任务到我们的计算资源之一。 python程序生成近1000个对象的请求并同时执行它们。当它收到请求(固定宽度字符串流)时,它会将输出直接写入文件,并在任务结果进入时附加到此文件。这会使内存开销降低,并尽可能快地移动内容。

现在,与所有项目一样,引入了新的要求。 Python解决方案需要对文件中的数据进行排序。使这一点变得复杂的是输出文件是固定宽度并且在Python中进行切片/排序会导致过多的工作。

是否存在gevent可以并行执行任务列表的模式,但不知何故,保持结果的顺序与列表中提交的顺序相同?我必须记住,返回的结果很大,我试图尽可能降低内存要求。

1 个答案:

答案 0 :(得分:0)

这是一种非常简单的方法,但可能会在您概述的限制范围内工作。但是,它没有直接使用gevent。

将每个任务的输出写入根据任务的id(顺序)命名的临时文件。完成所有任务后,按顺序读取文件并将每个文件的内容附加到最终输出文件中。因此,任何给定时间内只有一个任务输出的内容在内存中。