Powyżej znajduje się pełna prosty przykład działaOptimzing multiprocessing.Pool z drogich inicjalizacji
import multiprocessing as mp
import time
import random
class Foo:
def __init__(self):
# some expensive set up function in the real code
self.x = 2
print('initializing')
def run(self, y):
time.sleep(random.random()/10.)
return self.x + y
def f(y):
foo = Foo()
return foo.run(y)
def main():
pool = mp.Pool(4)
for result in pool.map(f, range(10)):
print(result)
pool.close()
pool.join()
if __name__ == '__main__':
main()
Jak mogę go zmodyfikować tak Foo jest inicjowana tylko raz przez każdego pracownika, nie każde zadanie? Zasadniczo chcę init nazywa się 4 razy, a nie 10. Używam Python 3.5
Czy byłoby dobrze, gdyby klasa została zainicjalizowana tylko raz, a następnie skopiowana do każdego pracownika? –
@BrendanAbel Tak myślę. Oznacza to, że przedmiot musi być do ogarnięcia? Obiekt nie jest zmutowany po inicjalizacji, więc nie wiem, dlaczego kopiowanie byłoby złe. – user2133814
Wieloprocesorowość to * nie * to samo co wielowątkowość. Mają bardzo różne cechy. – jpmc26