首页 > 解决方案 > python中的多重处理

问题描述

我想使用多处理来加速我的程序。

import multiprocessing

def read(li,i):
    name = "char"
    #updating my list here
    li[i:i] = [name]
    print(li)#this gives [4, 'char', 1]

def write(i):
    pass

li= []

if __name__ == '__main__':
    i = 1
    li =[4]
    p1 = multiprocessing.Process(target = read,args = (li,i,)) 
    p2 = multiprocessing.Process(target = write,args = (i,))

    p1.start()
    p2.start()
    p1.join()  
    p2.join()
    print(li)#this gives [4, 1] instead of the expected [4, 'char', 1]

这只是基本程序。在原始程序中,我需要更新这样的列表。列表变量li没有全局更新。我尝试在没有多处理的情况下做同样的事情,顺便说一句效果很好。我究竟做错了什么?

标签: python-3.xpython-multiprocessing

解决方案


您需要使用multiprocessing模块也提供的共享状态工具之一。

鉴于您提到更新列表,Array()可能会有用:

li = Array("i", [4])

如果您还需要更新变量i,则需要执行类似的操作。

有关详细信息,请参阅文档:https ://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes


推荐阅读