天天看点

python 多进程共享变量中的manager

因为需要提升效率,所以不可避免的用到了多进程。毕竟python中的多线程是伪多线程。

在多进程中经常需要共享变量,这时可以使用Queue等方式来解决,有时候我们还可以用multiprcessing中的manager。manager还可以很方便的实现进程内和进程外的交互。

manager常用的两个方法list,dict

manager = Manager()
d = manager.dict()
l = manager.list()
           

这里网上很多地方都有说有坑,修改dict内部值的时候,直接赋值是无效的。需要做一个类似于这样

m = d
m['2'] = 2
d = m
           

的变换。这个没有问题,但是使用list的时候很有意思,在进程内可以直接使用.append()追加,这在进程外是生效的,但是想要清空这个list。这个list是没有clear这个方法的,他会返回这是一个proxylist。

然而,你如果使用

l[:] = []
           

则可以在进程内清空