Tôi có một mảng lớn các đối tượng tùy chỉnh mà tôi cần thực hiện các tác vụ độc lập (có thể song song), bao gồm sửa đổi các tham số đối tượng. Tôi đã thử sử dụng cả một Manager(). Dict, và 'sharedmem'ory, nhưng cả hai đều không hoạt động. Ví dụ:Sửa đổi đối tượng trong đa xử lý python
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
in ra:
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
Tức là các đối tượng không được sửa đổi.
Làm cách nào để đạt được hành vi mong muốn?
http: // stackoverflow.com/questions/10721915/shared-memory-objects-in-python-multiprocessing – tacaswell
bạn có thể gửi một liên kết đến 'sharedmem' tôi không thể tìm thấy bất cứ điều gì trên đó. – tacaswell