簡體   English   中英

在python中分發進程

[英]Distributing processes in python

我有一個python腳本,可加載機器學習模型並對文本文件進行分類。 我的腳本如下所示:

import sys
for test_file in sys.argv[1:]:
    classify(test_file)

我正在使用python命令在10000個文件上運行腳本

python script.py my_dir/*.txt

其中my_dir包含要分類的10000個文本文件。 文件的處理是獨立的,我想知道是否可以使用線程分發該過程。 一種解決方案是將文件分發到單獨的文件夾中,然后分別運行命令,這似乎不是最好的解決方案。

一個簡單的游泳池可以嗎? 在這種情況下,這取決於您是否最好使用進程或線程。 我的猜測是過程,因為Python通常是這種情況。

from multiprocessing import Pool
# from multiprocessing.pool import ThreadPool as Pool    
import sys


def classify(filename):
    print("classified ", filename)


if __name__ == '__main__':
    p = Pool()
    p.map(classify, sys.argv[1:])
    p.close()
    p.join()

使用import語句中的任一個在進程和線程之間進行選擇。 這兩個池的接口完全相同。

我建議您僅定義一個線程數(每個處理器內核1個),然后將文件平均分配到該線程中。

from threading import Thread

class Distribute(Thread): 
    def __init__(self, files):
        Thread.__init__(self)
        self.files = files
    def run(self):
        for file in self.files:
            classify(file)

numberOfFile = len(sys.argv[1:])
numberOfThread = 4
numberOfFileByThread = numberOfFile // numberOfThread
threads = [Distribute(sys.argv[1:][i*numberOfFileByThread:(i+1)*numberOfFileByThread ]) for i in range(numberOfThread)]
for thread in threads:
    thread.start()
print("All thread running")
for thread in threads:
    thread.join()
print("processing completed")

暫無
暫無

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

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