【问题标题】:Efficient way of running multiple scripts simultaneously using Python使用 Python 同时运行多个脚本的有效方法
【发布时间】:2021-12-29 06:33:55
【问题描述】:

我有一个包含 10,000 行的 csv 文件,每行包含一个链接,我想下​​载每个链接的一些信息。由于这是一项消耗性的任务,我手动将其拆分为 4 个 Python 脚本,每个脚本处理 2,500 行。之后我打开 4 个终端并运行每个脚本。

但是我想知道是否有更有效的方法来做到这一点。到目前为止,我有 4 个脚本 .py 手动午餐。如果我必须做同样的事情但有 1,000,000 行会发生什么?我是否应该手动创建例如 50 个脚本并在每个脚本中下载该脚本行的信息?我希望我设法解释自己:)

谢谢!

【问题讨论】:

  • 查看multiprocessing.Pool()

标签: python terminal


【解决方案1】:

您无需进行任何手动拆分 - 设置一个 multiprocessing.Pool(),其中包含您要处理数据的工作人员数量,并为每个项目设置一个函数。一个简化的例子:

import multiprocessing


# This function is run in a separate process
def do_work(line):
    return f"{line} is {len(line)} characters long. This result brought to you by {multiprocessing.current_process().name}"


def main():
    work_items = [f"{2 ** i}" for i in range(1_000)]  # You'd read these from your file
    with multiprocessing.Pool(4) as pool:
        for result in pool.imap(do_work, work_items, chunksize=20):
            print(result)


if __name__ == "__main__":
    main()

这有(最多)4 个进程处理您的数据,出于优化原因,每个工作人员都有 20 个任务要处理。

如果您不需要按顺序排列结果,请使用更快的imap_unordered

【讨论】:

    【解决方案2】:

    您可以查看https://docs.python.org/3/library/asyncio-task.html 以使下载+处理任务异步。

    【讨论】:

      【解决方案3】:

      使用Threads 同时运行多个解释器实例 (https://realpython.com/intro-to-python-threading)

      【讨论】:

      • 线程不运行多个解释器实例。
      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2017-06-23
      相关资源
      最近更新 更多