python 线程与进程学习(9)----多进程之manager

前言

    记录一下学习进度.

1.进程之间数据共享manager

    在前面提到的Queue和Pipe,都只能实现进程之间数据的传递,而并不能实现数据的真正共享.Manager是可以实现数据的真正共享,对数据进行修改.

2.manager用法

from multiprocessing import Process,Manager
import os

def f(d,l):
    d['进程{}'.format(os.getpid())] = str(os.getpid())
    l.append(os.getpid())


if __name__ == '__main__':
    manager = Manager()
    d = manager.dict()          # 生成一个字典,用于在多个进程之间共享
    l = manager.list()          # 生成一个列表,用于在多个进程之间共享
    processing_list = []
    for i in range(10):
        p = Process(target=f,args=(d,l))
        p.start()
        processing_list.append(p)

    for p in processing_list:
        p.join()

    print('d:',d)
    print('len(d):',len(d))
    print('l:',l)
    print('len(l):',len(l))

执行结果:

d: {'进程5043': '5043', '进程5046': '5046', '进程5036': '5036', '进程5037': '5037', '进程5057': '5057', '进程5039': '5039', '进程5052': '5052', '进程5040': '5040', '进程5055': '5055', '进程5049': '5049'}
len(d): 10
l: [5036, 5037, 5039, 5040, 5043, 5046, 5049, 5052, 5057, 5055]
len(l) 10

程序解释:

我们先来看看def f()中干了什么

def f(d,l):
    d['进程{}'.format(os.getpid())] = str(os.getpid())
    l.append(os.getpid())

功能:传入两个参数,一个是字典,一个是列表,然后对字典和列表做相应的修改

接下来我们看看主程序中干了什么

manager = Manager()
d = manager.dict()          # 生成一个字典,用于在多个进程之间共享
l = manager.list()          # 生成一个列表,用于在多个进程之间共享

    先创建一个Manager对象,然后用manager对象生成一个字典和一个列表

    for i in range(10):
        p = Process(target=f,args=(d,l))
        p.start()
        processing_list.append(p)

    启动十个进程,将上面生成的manager类型的字典和列表作为参数传递给函数f(),这样的话就做到了每个进程都会修改这个字典和列表.

结果就是,是个进程都会这个字典和列表做了修改!!!

写在最后

    本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值