在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()

使用"导入语句"中的任何一个在过程和线程之间选择。两个池的接口完全相同。

我建议您简单地定义许多线程(每个处理器核心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")

相关内容

  • 没有找到相关文章

最新更新