multiprocessing.Manager()无法与主程序通信

2024-09-24 22:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么不使用这个代码?我试着用while1循环中的多重处理来创建一个进程。我希望这些进程与我的主进程有一些共享的内存来进行通信。这是我测试管理器的演示代码:

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]]

Tags: 代码importinputoutput进程managermultiprocessingls
1条回答
网友
1楼 · 发布于 2024-09-24 22:24:31

创建Manager.list对象后,必须设置对象内的数据,而不是重写它。如果你在print type(lso)行之前和之后撒上lso=(value),你就会明白我的意思

在下面的代码中,一个Manager.list对象在创建时被赋予一个值:ie:myvar = list([1,2,3])。创建第二个,然后将数据复制到其中: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]]

相关问题 更多 >