簡體   English   中英

使用 Python 同時運行多個腳本的有效方法

[英]Efficient way of running multiple scripts simultaneously using Python

我有一個包含 10,000 行的 csv 文件,每行包含一個鏈接,我想下載每個鏈接的一些信息。 由於這是一項消耗性的任務,我手動將其拆分為 4 個 Python 腳本,每個腳本處理 2,500 行。 之后,我打開 4 個終端並運行每個腳本。

但是我想知道是否有更有效的方法來做到這一點。 到目前為止,我有 4 個 scripts.py 我手動午餐。 如果我必須做同樣的事情但有 1,000,000 行會發生什么? 我是否應該手動創建例如 50 個腳本並在每個腳本中下載該腳本行的信息? 我希望我設法解釋自己:)

謝謝!

您不需要進行任何手動拆分 - 設置一個multiprocessing.Pool()與您想要處理數據的工人數量,並讓 function 為每個項目完成您的工作。 一個簡化的例子:

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

您可以查看https://docs.python.org/3/library/asyncio-task.html使下載+處理任務異步。

使用線程同時運行多個解釋器實例( https://realpython.com/intro-to-python-threading

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM