python 多进程通信 同步 manager_[b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager...

本文介绍了Python的multiprocessing模块中的Manager,用于实现多进程间的同步和数据共享。通过示例展示了如何创建并使用Manager对象,包括共享列表、字典、数组和值,以及如何配合Lock进行同步操作。在子进程中修改共享数据,并通过锁防止竞态条件,确保数据一致性。
摘要由CSDN通过智能技术生成

#-*- coding: utf-8 -*-

"""多进程数据共享 服务器进程 multiprocessing.Manager

入门使用

逻辑:

20个子线程修改共享数据

总结:

1. Mangeer类似 Value,Array

2. 里面内容比较多,这只是入门用法

3. 还可以操作共享自定义对象,本例是基本数据结构

简单使用:

1. 创建多进程管理的 基本数据结构

list1 = manager.list([1,2,3,4,5])

dict1 = manager.dict()

array1 = manager.Array('i',range(10))

value1 = manager.Value('i',1)

2. 有必要创建 锁 相关

lock = manager.Lock()

RLock

Semaphore

Condition

3. 在子进程中 使用

参考:

method: ['Array', 'BoundedSemaphore', 'Condition', 'Event', 'JoinableQueue'

, 'Lock', 'Namespace', 'Pool', 'Queue', 'RLock', 'Semaphore', 'Value', '_Client'

,'_finalize_manager', '_number_of_objects', '_run_server',

'connect', 'dict', 'get_server', 'join', 'list', 'register', 'start']"""

from multiprocessing importProcess,Managerimporttimedeffunc1(shareList, shareValue, shareDict, lock):"""子进程 修改共享数据 代码"""

#lock with 用法

#with lock:

#for i in xrange(len(shareList)):

#shareList[i] += 1

# #shareValue.value += 1

# #shareDict[1] = '1'

#shareDict[2] = '2'

# #time.sleep(1)

lock.acquire()#竞争锁

## 修改共享数据

for i inxrange(len(shareList)):

shareList[i]+= 1shareValue.value+= 1shareDict[1] = '1'shareDict[2] = '2'time.sleep(0.1)

lock.release()#释放锁

if __name__ == '__main__':#创建Manager对象

manager =Manager()#创建多进程共享的数据结构

list1 = manager.list([1,2,3,4,5])

dict1=manager.dict()

array1= manager.Array('i',range(10))

value1= manager.Value('i',1)print "before"

printlist1printdict1printarray1printvalue1

lock= manager.Lock() #创建锁

#创建20个进程对象,放到列表中

proc = [ Process(target=func1, args=(list1,value1,dict1,lock)) for i in xrange(20) ]#启动所有子进程

for p in proc: #并不是第一个启动的进程最先抢到锁

p.start()#等待所有子进程结束

for p inproc:

p.join()print "after"

printlist1printdict1printarray1printvalue1"""Out:

before

[1, 2, 3, 4, 5]

{}

array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Value('i', 1)

after

[21, 22, 23, 24, 25]

{1: '1', 2: '2'}

array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Value('i', 21)"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值