我有一个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()
使用"导入语句"中的任何一个在过程和线程之间选择。两个池的接口完全相同。
我建议您简单地定义许多线程(每个处理器核心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")