Многопоточная работа с единственным объектом
У меня есть Класс по которому я создаю объект и хочу совершить параллельную работу по вызову одного и того же метода.
Вот моя упрощенная реализация:
import multiprocessing
class A():
def __init__(self):
self.a = 0
def sum(self, num):
self.a += num
return self.a
def multi_sum(self, sum_list):
with multiprocessing.Pool() as pool:
res = pool.map(self.sum,sum_list)
print(self, res)
if __name__ == '__main__':
x = A()
x.multi_sum(range(1,10)
Как я понял, каждый процесс создает копию начального объекта и модифицирует ее.
Как мне сделать так чтобы каждый процесс модифицировал первоначальный объект и передавал его дальше?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Достаточно поменять одну строчку, но только если у вас питон 3.7 или позднее:
with multiprocessing.Pool() as pool:
^^^^^^
На вот эту:
with multiprocessing.pool.ThreadPool() as pool:
^^^^^^^^^^^^^^^^^
Тогда будут использоваться потоки вместо процессов и поведение будет такое, как вы хотите - будет меняться один объект, а не его копии в разных процессах.
Но помните про GIL, толку от такой многопоточности может быть не так много, как вам хотелось бы.