Posiadam dużą liczbę niestandardowych obiektów, które są potrzebne do wykonywania niezależnych (równoległych) zadań, w tym modyfikowania parametrów obiektu. Próbowałem używać zarówno menadżera(). Dict, jak i "sharedmem", ale żadne z nich nie działa. Na przykład:Modyfikuj obiekt w trybie wieloprocesorowym Pythona
import numpy as np
import multiprocessing as mp
import sharedmem as shm
class Tester:
num = 0.0
name = 'none'
def __init__(self,tnum=num, tname=name):
self.num = tnum
self.name = tname
def __str__(self):
return '%f %s' % (self.num, self.name)
def mod(test, nn):
test.num = np.random.randn()
test.name = nn
if __name__ == '__main__':
num = 10
tests = np.empty(num, dtype=object)
for it in range(num):
tests[it] = Tester(tnum=it*1.0)
sh_tests = shm.empty(num, dtype=object)
for it in range(num):
sh_tests[it] = tests[it]
print sh_tests[it]
print '\n'
workers = [ mp.Process(target=mod, args=(test, 'some')) for test in sh_tests ]
for work in workers: work.start()
for work in workers: work.join()
for test in sh_tests: print test
drukuje:
0.000000 none
1.000000 none
2.000000 none
3.000000 none
4.000000 none
5.000000 none
6.000000 none
7.000000 none
8.000000 none
9.000000 none
0.000000 none
1.000000 none
2.000000 none
3.000000 none
4.000000 none
5.000000 none
6.000000 none
7.000000 none
8.000000 none
9.000000 none
Tj obiekty nie są modyfikowane.
Jak osiągnąć pożądane zachowanie?
http: // stackoverflow.com/questions/10721915/shared-memory-objects-in-python-multiprocessing – tacaswell
Czy możesz umieścić link do 'sharedmem' nie mogę znaleźć niczego na ten temat. – tacaswell