#coding:utf-8import time
import os
import multiprocessingdef work(count):print(count,',进程id:',os.getpid())time.sleep(5)if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程for i in range(20):pool.apply_async(func=work,args=(i,))time.sleep(20)
0 ,进程id: 8900
1 ,进程id: 15076
2 ,进程id: 11272
3 ,进程id: 17004
4 ,进程id: 154445 ,进程id: 15076
6 ,进程id: 8900
7 ,进程id: 11272
8 ,进程id: 17004
9 ,进程id: 1544410 ,进程id: 15076
11 ,进程id: 8900
12 ,进程id: 11272
13 ,进程id: 17004
14 ,进程id: 1544415 ,进程id: 8900
16 ,进程id: 15076
17 ,进程id: 17004
18 ,进程id: 11272
19 ,进程id: 15444

运行结果,可以看出:

1.进程id 是重复利用的,说明所有的进程是创建好的,放在一个Pool中。

2.因为Pool中一开始创建了5个进程,所以可以看到每次输出,都以5个,5个一起输出,因为Pool的最大能力是5。可以看到进程id 不是按照递增的顺序进行的,因为Pool 创建进程是异步的。

3.可以看到在主进程中有这一行代码:time.sleep(20),如果没有加这行代码,就看不到任何输出,为什么会这样呢?因为,在我们进程池还没有创建成功时,主进程已经运行完了。

4.如果不采用 time.sleep(20) 这种延时操作的话,也可以在后面加入 pool.close() pool.join() 来阻塞,这样也会等到进程池全部创建完毕。代码如下:

#coding:utf-8import time
import os
import multiprocessingdef work(count):print(count,',进程id:',os.getpid())time.sleep(5)if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程for i in range(20):pool.apply_async(func=work,args=(i,))pool.close()pool.join()

获取进程的返回值:

#coding:utf-8import time
import os
import multiprocessingdef work(count):print(count,',进程id:',os.getpid())time.sleep(5)return 'result is %d,pid is %d' % (count,os.getpid())if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程results=[]for i in range(20):result=pool.apply_async(func=work,args=(i,))results.append(result)for res in results:print(res.get())  # 通过这种方式,也就不需要后续调用 pool.close() 和 pool.join()# pool.close()# pool.join()

进程锁 :

#coding:utf-8import time
import os
import multiprocessingdef work(count,lock):lock.acquire()print(count,',进程id:',os.getpid())time.sleep(5)lock.release()return 'result is %d,pid is %d' % (count,os.getpid())if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程manager = multiprocessing.Manager()lock=manager.Lock()#results=[]for i in range(20):result=pool.apply_async(func=work,args=(i,lock))#results.append(result)# for res in results:#     print(res.get())  # 通过这种方式,也就不需要后续调用 pool.close() 和 pool.join()pool.close()pool.join()

Python 进程池与进程锁相关推荐

  1. Python线程池与进程池

    Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...

  2. python 获取进程池 sleeping_Python 进程操作之进程池--Pool

    进程池和multiprocess.Pool模块 1.进程池 为什么要有进程池?进程池的概念. 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要 ...

  3. python并行计算进程池通信_Python使用进程池管理进程和进程间通信

    与线程池类似的是,如果程序需要启动多个进程,也可以使用进程池来管理进程.程序可以通过 multiprocessing 模块的 Pool() 函数创建进程池,进程池实际上是 multiprocessin ...

  4. 进程池 python_Python进程池

    在python中启动进程是非常耗资源的,有了进程池就可以限制同一时刻运行的进程数,避免程序崩溃. Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建 ...

  5. 【Swoole系列3.5】进程池与进程管理器

    进程池与进程管理器 我们已经学习过单个进程相关的内容,也学习了进程间如何进行通信,但是,一个一个地进程还是非常不好管理,这不,Swoole 就为我们直接准备好了进程池以及进程管理相关的工具. 进程池 ...

  6. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  7. python进程池_python进程池剖析(一)

    python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...

  8. Python线程池、进程池的介绍与使用

    文章目录 1.问题背景 2.单线程→\rightarrow→多线程→\rightarrow→线程池 2.1单线程简介 2.2多线程简介 2.3线程池介绍 2.3.1复用线程 2.3.2线程池的使用 3 ...

  9. python 进程池_python进程池

    当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiproce ...

最新文章

  1. 12-flutter Textfield的使用
  2. 浏览器兼容:IE6,IE7,IE8,FIREFOX,Chrome
  3. 爆改古董卡西欧计算器!能联网、能聊天,「作弊神器」只要150块
  4. c++生成nurbs曲面文件_使用曲面细分丰富原始多边形
  5. react打包后图片丢失_使用 webpack 搭建 React 项目
  6. Python学习笔记-包
  7. jmeter之JDBC类组件
  8. Java第十周的作业
  9. 计算机算法设计与分析 大学生电影节观影问题
  10. Jquery和JS获取ul中li标签
  11. nas918+支持的cpu_cpu拷机软件推荐:cpu烤机用什么软件
  12. 基于Python完成云知声平台的语音合成接口
  13. 谷歌翻译服务退出中国大陆,使用SwitchyOmega仍需要全文翻译,恢复访问的方法
  14. python爬虫脚本获取网易招聘某个职业的全部数据信息
  15. 硬盘变成了raw格式了怎么办?数据还能找回吗
  16. 慈爱的教育部门被误解了 --- 真正减负令的实施方案探讨
  17. Ka的分治|归并排序,注释详尽
  18. 使用udp协议实现服务器端程序时,uIP中UDP协议实现的改进
  19. 更改极点为第一输入法
  20. 利用Matlab判断某些点是否在多边形区域内

热门文章

  1. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十四) 精灵控件横空出世!①
  2. win10 gtx1660ti 配置vs opencv cuda加速
  3. 论文四 ERP 开发的应用
  4. 使用Direct3D渲染2D图素
  5. js动态给元素添加属性
  6. Cocos2d-x中父节点scale对子节点的影响
  7. ecshop 属性自动组合_传奇手游,神途自动升级,好混属性强大
  8. 一位老师对学生的人生寄语(Z)
  9. java 判断对象是否为空_java怎么判断对象是否为空
  10. 从游戏开挂谈谈数据类型