# -*- 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-shell学习笔记2

    1.命令的运行顺序 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』: 由 alias 找到该命令来运行: 由 bash 内建的 (builtin) 命令来运行: 通过 $PAT ...

  2. CSS学习笔记-过度模块-编写过渡效果

    过渡模块-编写过渡效果: 1.编写过渡套路:    1.1不要管过渡,先编写基本界面    1.2修改我们认为需要修改的属性    1.3再给被修改属性的元素添加过渡即可 2.弹性效果    < ...

  3. 微信两种签名算法MD5和HMAC-SHA256

    在做微信接口开发的过程中, 有时候发现会提示签名校验失败, 一模一样的签名逻辑就是有些接口跑步通, 找了一圈发现挺坑的; 原来是有些接口的signType签名类型有区别, 有些接口signType要求 ...

  4. 循环语句for基本概述

    循环语句for基本概述 01. for循环基础语法 for 变量名 in [ 取值列表 ]do 循环体done 02. for循环基本使用示例 #取值列表有多种取值方式,可以直接读取in后面的值,默认 ...

  5. MySQL数据篇(八)-- 存储过程的简单实现

    思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码实现.如果我们现在有一项目,业务需要在用户下单后,对用户的订单进行 ...

  6. Linux下磁盘实战操作命令

    企业真实场景由于硬盘常年大量读写,经常会出现坏盘,需要更换硬盘.或者由于磁盘空间不足,需添加新硬盘,新添加的硬盘需要经过格式化.分区才能被 Linux 系统所使用. 虚拟机 CentOS 7 Linu ...

  7. Git 提交代码到远程仓库

    Git 命令 一.Git如何把本地代码推送到远程仓库 1. 拉取指定分支代码 git clone -b dev https://github.com/crazyfzw/RecycleViewWithH ...

  8. Android 中的AlertDialog使用自定义布局

    Android使用指定的View开发弹窗功能 Android开发中进程会使用到我们的AlertDialog,但是比较可惜的是我们的Android原生的AlertDialog的效果又比较的简陋,这个时候 ...

  9. git分支合并创建切换

    1. 场景描述 介绍下Git最新内容合并到主干.从主干创建最新分支.idea下切换最新分支,能在2分钟内完成git合并.分支创建以及在idea中完成切换,希望能帮到一些朋友. 2. 解决方案 从以下三 ...

  10. IT兄弟连 Java语法教程 数组 多维数组 二维数组的初始化

    二维数组的初始化与一位数组初始化类似,同样可以使用静态初始化或动态初始化. 1)静态初始化 静态初始化的格式如下: 数组名字 = new 数组元素的类型[][]{new 数组元素的类型[]{元素1,元 ...