# -*- 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 import Process,Manager
import time def func1(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 in xrange(len(shareList)):
shareList[i] += 1 shareValue.value += 1 shareDict[1] = ''
shareDict[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"
print list1
print dict1
print array1
print value1 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 in proc:
p.join() print "after"
print list1
print dict1
print array1
print value1 """
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) """

[b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager的更多相关文章

  1. [b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe

    # -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe 逻辑: 2个进程,各自发送数据到管道,对方从管道中取到数据 总结: 1.只适合两个进 ...

  2. [b0035] python 归纳 (二十)_多进程数据共享和同步_共享内存Value & Array

    1. Code # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一 ...

  3. [b0041] python 归纳 (二六)_多进程数据共享和同步_事件Event

    # -*- coding: utf-8 -*- """ 多进程 同步 事件multiprocessing.Event 逻辑: 子线程负责打印,会阻塞, 等待主进程发出控制 ...

  4. [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore

    # -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...

  5. [b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock

    # -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共 ...

  6. [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue

    1  队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...

  7. [b0016] python 归纳 (二)_静态方法和类方法

    # -*- coding: UTF-8 -*- """ 测试 类的静态方法,类方法 @staticmethod @classmethod 总结: 1. self 指向类对 ...

  8. python 笔记二

    17.进程线程 进程间通信方式:管道Pipe:队列Queue:共享内存Value.Array.Manager: 多进程同步:锁Lock.递归锁RLock.Condition(条件变量):事件event ...

  9. python爬虫入门八:多进程/多线程

    什么是多线程/多进程 引用虫师的解释: 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期. 进程(有时被称为重量级进程)是 ...

随机推荐

  1. Linux-正则、grep、sed学习笔记

    一.正则和grep 正则表达式的实现分成了两类: 基本正则表达式(BRE)和扩展的正则表达式(ERE). BRE 和 ERE 之间有什么区别呢?这是关于元字符的问题.BRE 可以辨别以下元字符: ^ ...

  2. vue v-if和v-show的区别

    其中v-if依赖于控制DOM节点,而v-show是依赖于控制DOM节点的display属性. 当v-show传入的值为true时,对应DOM元素的display的值为block之类的,反之为false ...

  3. Dynamics CRM命令栏定制基础知识及手动编辑customization.xml实例

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复166或者20151028可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的博文:Dynamics C ...

  4. Tensorflow创建会话,启动会话

    import tensorflow as tf #定义一个常量 m1=tf.constant([[,]])#这是一个一行两列的数据 print(m1) m2=tf.constant([[],[]]) ...

  5. Linux系统学习 三、网络基础—虚拟机网络配置

    Linux网络基础 Linux的ip地址配置 Linux网络配置文件 常用网络命令 虚拟机网络参数配置 1.配置Linux的IP地址 首先配置一个IP地址,让IP生效. ifconfig查看当前网络配 ...

  6. 轻量级监控平台之cpu监控

    轻量级监控平台之cpu监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器的硬件层面-cpu负载数据 . /etc/profile . ~/.bash_profile pushur ...

  7. React 修改获取state中的值

    14===> 修改state中的值 不能够直接修改 state = { num: 10 } 如 this.state.num+=12; 不能够直接修改 错误 通过 this.setState({ ...

  8. Fastdfs的安装流程

    一.修改ip地址 1.查看网卡一的mac地址 cat /etc/udev/rules.d/70-persistent-net.rules 2.修改ip地址文件 cd /etc/sysconfig/ne ...

  9. requests乱码问题

    有三种方法解决请求后乱码问题. 一:获取二进制数据,再利用str进行编码转换 url='http://music.baidu.com' r = requests.get(url) html=r.con ...

  10. QT使用LIBS添加绝对路径的dll引用

    http://blog.sina.com.cn/s/blog_70b93da90100n6w8.html 参考这篇文章 举例: 要引用 F:\QT\parttime_work\build-JChart ...