Я пытаюсь распараллелить код для одного из моих проектов с помощью многопроцессорной обработки. В этом проекте у меня есть 3 модуля: A, B и C, каждый из которых содержит класс с тем же именем модуля. Класс в модуле A создает экземпляры объектов из модулей B и C, а затем создается с помощью сценария в другом файле, который выполняет в нем функцию.
Теперь каждый из этих классов (A, B и * 1012) *) есть метод, который запускает некоторые манипуляции с массивами, которые я бы запустил параллельно. До сих пор мой подход заключался в том, чтобы создать экземпляр пула внутри метода, позволить ему запустить код, необходимый для его запуска, а затем завершить пул, когда это будет сделано. Проблема заключается в том, что эти методы вызываются несколько раз, поэтому создание и уничтожение пула каждый раз заставляет код становиться все медленнее и медленнее.
Есть ли способ создать глобальный пул, который будет совместно использоваться модулями они называют это, когда им это нужно, без необходимости каждый раз создавать и уничтожать его?
# A.py
import B, C
class A(){
def __init__(self):
b = B()
c = C()
def method(self):
pool = mp.Pool()
results = [pool.apply_async(self.parfunc, args=(i, )) for i in array]
output = [p.get() for p in results]
def main(self):
b.method()
c.method()
self.method()
# B.py
class B(){
def method(self):
pool = mp.Pool()
results = [pool.apply_async(self.parfunc, args=(i, )) for i in array]
output = [p.get() for p in results]
}
# C.py
class C(){
def method(self):
pool = mp.Pool()
results = [pool.apply_async(self.parfunc, args=(i, )) for i in array]
output = [p.get() for p in results]
}
# script.py
import A
if __name__ = '__main__':
a = A()
a.main()