#python #multiprocessing #overhead
#python #многопроцессорная обработка #накладные расходы
Вопрос:
Я реализовал небольшие статистические функции и распараллелил их с помощью многопроцессорной обработки. Общая структура кода выглядит следующим образом:
def worker(args, no):
f = Stat.fit(args)
return f.result
class Stat:
def fit(self):
doing various things...
def bootstrap(self):
p = mp.Pool(mp.cpu_count())
parameter = ... #set parameters for Stat
worker = functools.partial(worker, parameter)
for i, _ in enumerate(p.imap_unordered(worker, range(1000))):
pass
Итак, метод начальной загрузки в классе Stat вызывает процессы, которые запускают функцию, которая создает экземпляр класса Stat и запускает методы fit() . Я думаю, что этот подход, возможно, довольно неэффективен. Лучше ли заменить класс функциями? Или использование подобных классов не влияет на производительность многопроцессорной обработки?
Ответ №1:
Это не неэффективно (это не повлияет на производительность), это просто неортодоксально. Вероятно, было бы немного чище, если бы вы убрали bootstrap
из Stat
, поскольку не похоже, что он выигрывает от того, что является методом этого класса.
def worker(args, no):
f = Stat.fit(args)
return f.result
def bootstrap(self):
p = mp.Pool(mp.cpu_count())
parameter = ... #set parameters for Stat
worker = functools.partial(worker, parameter)
for i, _ in enumerate(p.imap_unordered(worker, range(1000))):
pass
class Stat:
def fit(self):
doing various things...