#前面的队列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]的更多相关文章

  1. Python 进程之间共享数据

    最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享  在mp库当中,跨进程对象共享有三种方式,第一种 ...

  2. Python 进程之间共享数据(全局变量)

    进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...

  3. 用WM_COPYDATA消息来实现两个进程之间传递数据

    文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法:在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有   1.使用内存映射 ...

  4. 进程队列(Queue),Pipe(管道), Manager 进行进程之间的数据传递和传输

    进程Queue,实现进程传输的队列 1.Queue from multiprocessing import Process, Queue def f(q): q.put('1') q.put('2') ...

  5. 进程之间的数据共享 -----Manager模块

    展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据. 这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中 ...

  6. 进程间共享数据Manager

    一.前言 进程间的通信Queue()和Pipe(),可以实现进程间的数据传递.但是要使python进程间共享数据,我们就要使用multiprocessing.Manager. Manager()返回的 ...

  7. Python 之并发编程之manager与进程池pool

    一.manager 常用的数据类型:dict list 能够实现进程之间的数据共享 进程之间如果同时修改一个数据,会导致数据冲突,因为并发的特征,导致数据更新不同步. def work(dic, lo ...

  8. VC++共享数据段实现进程之间共享数据

    当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...

  9. 使用RandomAccessFile在两个java进程之间传递数据

    大部分情况下,我们面对在两个java进程只见传递数据的问题时,第一个想到的就是开server,然后通过socket收发消息.这方面有大量的框架可用,就不细说了.但如果两个进程是在一台机器上,那么还可以 ...

随机推荐

  1. GC 提前晋升

    如果Survivor 空间不足, 那么从 Eden 存活下来的和原来在 Survivor 空间中不够老的对象占满 Survivor 后, 就会提升到老年代, 可以看到这一轮 Minor GC 后老年代 ...

  2. 统计numpy数组中每个值的个数

    import numpy as np from collections import Counter data = np.array([1.1,2,3,4,4,5]) Counter(data) #简 ...

  3. 理解 tornado.gen

    转自:http://blog.xiaogaozi.org/2012/09/21/understanding-tornado-dot-gen/ 理解 tornado.gen SEP 21ST, 2012 ...

  4. js判断各种浏览器

    <script type="text/javascript"> if (navigator.appName.indexOf("Microsoft Intern ...

  5. python基础补充内容

    知识内容: 1.三元运算表达式 2.python代码编写规范 3.模块导入与使用 4.python文件名 5.python脚本的"__name__"属性 6.python之禅 一. ...

  6. 6.package配置相关

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 属性名 是否必须 说明 Name 是 Package的唯一标识,不允许同名 ...

  7. node 删除文件 和文件夹

    删除文件 var fs = require('fs'); fs.unlink(path,callback); 删除文件夹 deleteFolder(path); function deleteFold ...

  8. windows installer 应用变换时的错误.请验证指定的变换路径是否有

    安装Windows Installer Clean Up 清理一下残留的项目之后再装或者手动去注册表找 HKEY_CLASSES_ROOT\Installer\Products\ 下面的"子 ...

  9. UI5-文档-4.8-Translatable Texts

    在这一步中,我们将UI的文本移动到一个单独的资源文件中. 这样,他们都在一个中心位置,可以很容易地翻译成其他语言.这个国际化过程(简称i18n)是在SAPUI5中通过使用一种特殊的资源模型和标准的数据 ...

  10. H5 缓存机制解析

    在web项目开发中,我们可能都曾碰到过这样一个棘手的问题: 线上项目需要更新一个有问题的资源(可能是图片,js,css,json数据等),这个资源已经发布了很长一段时间,为什么页面在浏览器里打开还是没 ...