![](/img/trans.png)
[英]How to work with a multiprocessing.Manager() Array in python
[英]multiprocessing.Manager() communication with main programm didn't work
為什么該代碼不起作用? 我試圖用多處理創建一個在while 1循環中工作的流程。 我希望這些進程與我的主進程共享一些內存以進行通訊。 這是我用於測試Manager的演示代碼:
import multiprocessing
import time
def f(ls,lso, ):
print "input ls:"
print ls
print "input lso:"
print lso
ls[0] += 1
ls[1][0] += 1
ls_2 = ls[2]
print ls_2
ls_2[0] += 1
print ls_2
ls[2] = ls_2
print "output ls:"
print ls
tmp = []
tmp.append([1, 2, 3])
tmp.append([5, 6, 7])
lso = tmp
print "output lso:"
print lso
if __name__ == '__main__':
manager = multiprocessing.Manager()
#ls = manager.list([1, [1], [1]])
ls = manager.list()
lso = manager.list()
lso = [[0, 0, 0], [0, 0, 0]]
tmp = []
tmp.append(1)
tmp.append([1])
tmp.append([1])
ls = tmp
print 'before', ls, lso
p = multiprocessing.Process(target=f, args=(ls, lso, ))
p.start()
p.join()
print 'after', ls, lso
輸出為:
before [1, [1], [1]] [[0, 0, 0], [0, 0, 0]]
after [1, [1], [1]] [[0, 0, 0], [0, 0, 0]]
創建Manager.list
對象后,必須在對象內部設置數據,而不是覆蓋它。 如果在lso=(value)
行之前和之后撒上print type(lso)
,您會明白我的意思。
在以下代碼中,在創建時為一個Manager.list對象提供了一個值:即: myvar = list([1,2,3])
。 創建第二個,然后將數據復制到其中: myvar = list(); myvar[:] = [2,3,4]
myvar = list(); myvar[:] = [2,3,4]
玩得開心!
import multiprocessing
import time
def f(ls,lso, ):
print "input ls:"
print ls
print "input lso:"
print lso
ls[0] += 1
ls[1][0] += 1
ls_2 = ls[2]
print ls_2
ls_2[0] += 1
print ls_2
ls[2] = ls_2
print "output ls:"
print ls
tmp = []
tmp.append([1, 2, 3])
tmp.append([5, 6, 7])
lso = tmp
print "output lso:"
print lso
if __name__ == '__main__':
manager = multiprocessing.Manager()
#ls = manager.list([1, [1], [1]])
ls = manager.list()
lso = manager.list(
[[0, 0, 0], [0, 0, 0]]
)
tmp = []
tmp.append(1)
tmp.append([1])
tmp.append([1])
ls[:] = tmp
print 'before', ls, lso
p = multiprocessing.Process(target=f, args=(ls, lso, ))
p.start()
p.join()
print 'after', ls, lso
before [1, [1], [1]] [[0, 0, 0], [0, 0, 0]]
input ls:
[1, [1], [1]]
input lso:
[[0, 0, 0], [0, 0, 0]]
[1]
[2]
output ls:
[2, [1], [2]]
output lso:
[[1, 2, 3], [5, 6, 7]]
after [2, [1], [2]] [[0, 0, 0], [0, 0, 0]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.