[英]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.