【问题标题】:How to process multiple tasks concurrently while maintaining order on the input & output?如何同时处理多个任务,同时保持输入和输出的顺序?
【发布时间】:2014-12-04 05:02:23
【问题描述】:

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

现在,与所有项目一样,引入了一项新要求。 Python解决方案需要对文件中的数据进行排序。更复杂的是,输出文件的宽度是固定的,在 Python 中对其进行切片/排序会浪费太多时间。

是否存在gevent 可以并行执行任务列表但不知何故保持结果与在列表中提交的顺序相同的模式?我确实必须记住,返回的结果是相当大的,我正在努力将内存需求保持在尽可能低的水平。

【问题讨论】:

    标签: python parallel-processing queue gevent


    【解决方案1】:

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

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

    【讨论】:

    • 我已经把这个选项搞砸了,它确实有意义。我再等几天,如果没有其他选择,我会将此标记为答案。
    • 鉴于缺乏选项,我想我会将其标记为我的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2021-07-15
    • 1970-01-01
    • 2012-01-06
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多