python进程之间修改数据[Manager]与进程池[Pool]
- #前面的队列Queue和管道Pipe都是仅仅能再进程之间传递数据,但是不能修改数据,今天我们学习的东西就可以在进程之间同时修改一份数据
- #Mnager就可以实现
- import multiprocessing
- import random
- def f(l,n):
- l.append(n)
- if __name__ == '__main__':
- m = multiprocessing.Manager()
- m_dict = m.dict()
- m_list = m.list(range(4))
- p_list = []
- for i in range(10):
- p = multiprocessing.Process(target=f,args=(m_list,i))
- p.start()
- p_list.append(p)
- for p in p_list:
- p.join()
- print(m_list)
结果如下
- '''
- 结果如下,实现不同进程之间修改数据
- [0, 1, 2, 3, 0, 3, 1, 4, 6, 2, 8, 9, 7, 5]
- '''
- # 进程池,允许同一时间最多有多少个进程在运行,因为进程非常耗费资源
- import time
- import multiprocessing
- def Foo(i):
- time.sleep(2)
- return i + 100
- def Bar(arg):
- print("---exec down:",arg)
- if __name__ == '__main__':
- multiprocessing.freeze_support()
- #windows的多进程必须要加这个一项
- pool = multiprocessing.Pool(3)
- for i in range(10):
- pool.apply_async(func=Foo,args=(i,),callback=Bar)
- #这句话有3个意思
- #1、apply_async这个意思是异步执行
- #2、这里的意思执行Foo,参数为i,callback这里的意思就是Foo这个函数的返回值作为Bar的函数输入,这个是自动传递的;
- #3、这里还有一个意思是,执行Foo这个函数后,然后才执行Bar这个函数
#4、这里我们可以在Bar这个函数中接受子进程的执行结果,我们就可以把这个结果放在一个list中,从而也可以间接获取到子进程的执行结果- print("end")
- pool.close()
- pool.join()
- #pool的时候必须先close,然后在join,这个必须要记住,pool的用法不一样
结果如下
- end
- ---exec down: 100
- ---exec down: 101
- ---exec down: 102
- ---exec down: 103
- ---exec down: 104
- ---exec down: 105
- ---exec down: 106
- ---exec down: 107
- ---exec down: 108
- ---exec down: 109
python进程之间修改数据[Manager]与进程池[Pool]的更多相关文章
- Python 进程之间共享数据
最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享 在mp库当中,跨进程对象共享有三种方式,第一种 ...
- Python 进程之间共享数据(全局变量)
进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...
- 用WM_COPYDATA消息来实现两个进程之间传递数据
文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法:在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有 1.使用内存映射 ...
- 进程队列(Queue),Pipe(管道), Manager 进行进程之间的数据传递和传输
进程Queue,实现进程传输的队列 1.Queue from multiprocessing import Process, Queue def f(q): q.put('1') q.put('2') ...
- 进程之间的数据共享 -----Manager模块
展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据. 这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中 ...
- 进程间共享数据Manager
一.前言 进程间的通信Queue()和Pipe(),可以实现进程间的数据传递.但是要使python进程间共享数据,我们就要使用multiprocessing.Manager. Manager()返回的 ...
- Python 之并发编程之manager与进程池pool
一.manager 常用的数据类型:dict list 能够实现进程之间的数据共享 进程之间如果同时修改一个数据,会导致数据冲突,因为并发的特征,导致数据更新不同步. def work(dic, lo ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- 使用RandomAccessFile在两个java进程之间传递数据
大部分情况下,我们面对在两个java进程只见传递数据的问题时,第一个想到的就是开server,然后通过socket收发消息.这方面有大量的框架可用,就不细说了.但如果两个进程是在一台机器上,那么还可以 ...
随机推荐
- 1048 Find Coins (25 分)
1048 Find Coins (25 分) Eva loves to collect coins from all over the universe, including some other p ...
- Linux常用的一些基础命令
删除 rm -rvf * -f:强制删除文件或文件夹 -r:递归的删除文件或文件夹 -i:删除文件或文件夹前需要确认 -v:详细显示进行步骤 查看 ls ll ls -l cat mor ...
- idea配置(卡顿、开发环境等配置),code style template
Tomcat配置VM Options: -XX:PermSize=512m -XX:MaxPermSize=1024m 1.IDEA卡顿,修改IDEA使用内存 修改idea配置文件 在IDEA的 ...
- Installation of Scylla on CentOS 7
Scylla on CentOS 7 Use these steps to install Scylla using Yum repositories on CentOS. Prerequisites ...
- mysql 更新(二)安装和基本管理
03-MySql安装和基本管理 本节掌握内容: MySQL的介绍安装.启动 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目 ...
- async task 异步消息
async 和 await 是用来定义的异步方法,async 关键字是上下文关键字,原因在于只有当它修饰方法.lambda 表达式或匿名方法时,它才是关键字. 在所有其他上下文中,都会将其解释为标 ...
- 简单学习Git
Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! Git的发展历史 很多人都知道,Linus在1991年创建了开源的Linu ...
- angularjs 整合 bootstrap
第一步 :下载 bootstrap jquery ppper.js npm install bootstrap@4.0.0-beta.2 jquery popper.js --save 第二步: ...
- 【转】Ultra simple ISO-7816 Interface
原文出自 http://hilbert-space.de/?p=135 While laying out a PCB for my SWP reader project I realized that ...
- XE6 任务栏 控件
WIN7/WIN8 ONLY,鼠标放在任务栏上,预览程序界面,用此控件可以预览安装进度条. Taskbar1->ProgressMaxValue = 100; Taskbar1->Pro ...