Распределение процессов в питоне - PullRequest
0 голосов
/ 03 июля 2019

У меня есть скрипт на python, который загружает модель машинного обучения и классифицирует текстовые файлы. Мой скрипт выглядит примерно так:

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

Я запускаю скрипт на 10000 файлов с помощью команды python

python script.py my_dir/*.txt

Где my_dir содержит 10000 текстовых файлов для классификации. Обработка файлов независима, и мне интересно, можно ли распространять этот процесс с помощью потоков. Одним из решений является распределение файлов в отдельных папках и выполнение команд по отдельности, что не кажется лучшим решением.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Подойдет ли простой пул?В этом случае это зависит от того, будет ли вам лучше с процессами или потоками.Я думаю, что процессы, как это обычно бывает с 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()

Используйте любой из операторов импорта для выбора между процессами и потоками.Интерфейс для обоих пулов абсолютно одинаков.

0 голосов
/ 03 июля 2019

Я рекомендую вам просто определить количество потоков (по 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...