码迷,mamicode.com
首页 > 编程语言 > 详细

113 python程序中的进程操作-进程间数据共享(multiProcess.Manger)

时间:2019-09-22 21:30:21      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:mes   使用   type   系统   other   list   交换   数据类型   pac   

一、进程之间的数据共享

展望未来,基于消息传递的并发编程是大势所趋

即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据。

这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中。

但进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题。

以后我们会尝试使用数据库来解决现在进程之间的数据共享问题。

1.1 Manager模块介绍

虽然进程间数据独立,但可以通过Manager实现数据共享,事实上Manager的功能远不止于此。

A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.

A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.

1.2 Manager例子

  • manager这里可以共享列表,字典等很多数据类型
from multiprocessing import Manager,Process,Lock
def work(d,lock):
    lock.acquire()
    d['count'] -= 1
    lock.release()


if __name__ == '__main__':
    lock = Lock()
    with Manager() as m:
        dic = m.dict({'count':100})#生成一个字典,可在多个进程间共享和传递
        p_l = []
        for i in range(100):
            p = Process(target=work,args=(dic,lock))
            p_l.append(p)
            p.start()
        for p in p_l: #等待结果
            p.join()
        print(dic)

{‘count‘:0}

113 python程序中的进程操作-进程间数据共享(multiProcess.Manger)

标签:mes   使用   type   系统   other   list   交换   数据类型   pac   

原文地址:https://www.cnblogs.com/xichenHome/p/11569050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!