多进程模块:multiprocessing
多进程:
(1) 前面我们学习的多线程,其实算不上真正的多线程,即使你开了很多个线程,在同一时间内只能有一个CPU核数来处理一个线程
(2) 在 python 中,多进程算得上是真正的多线程,假设你的CPU有四核,如果开四个子进程,四个CPU核数会同时处理这四个子进程
(3) 在 threading 中,我们是通过 threading.Thread(target=function, args=(....)) 来创建一个对象,然后再通过对象的 start() 方法来运行一个子线程,多个子线程可以并发执行
(4) 在 multiprocessing 中,我们是通过 multiprocessing.Process(target=function, args=(....)) 来创建一个对象,然后再通过对象的 start() 方法来运行一个子进程,多个子进程可以并发执行
#!/usr/bin/env python
#-*- coding:utf-8 -*- import os
import time
import multiprocessing def fun():
print 'hello world', os.getpid(), os.getppid()
time.sleep(1) for i in range(10):
p = multiprocessing.Process(target=fun, args=())
p.start()
[root@localhost ~]$ python 1.py
hello world 4056 4055
hello world 4057 4055
hello world 4058 4055
hello world 4059 4055
hello world 4060 4055
hello world 4061 4055
hello world 4062 4055
hello world 4063 4055
hello world 4064 4055
hello world 4065 4055
multiprocessing 进程池:
(1) 当我们只需要几个或十几个多进程时,可以用 multiprocessing.Process() 来创建,但如果我们需要几百或几千个子进程同时并发运行时还用这种方法就不可取了
(2) 我们可以创建一个进程池,进程池会自动创建一个新的子进程来执行请求,multiprocessing 提供了 Pool 这个类来实现创建进程池
(3) 进程池里可以设置最大可创建的子进程数,当有新的请求提交到 pool 中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;
(4) 但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。
pool = multiprocessing.Pool(processes=4) 创建一个进程池,processes 可以指定进程池里可以创建的最大子进程数,设置成跟CPU核数一致即可
pool.apply_async(func=...., args=(....)) 向进程池提交请求,进程池会自动创建一个新的进程来处理该请求,如果提交的请求超过最大可创建的进程数就会被阻塞,处于等待状态
pool.close() 关闭进程池,会等待池中的请求执行完才关闭
pool.terminate() 关闭进程池,会直接关闭,即使池中还有请求在执行
pool.join() 阻塞主进程,防止子线程还没执行完程序就退出了,必须用在 pool.close() 后面
#!/usr/bin/env python
#-*- coding:utf-8 -*- import os
import time
import multiprocessing def hello():
print 'hello world', time.ctime()
time.sleep(1) if __name__ == '__main__':
pool = multiprocessing.Pool(processes=2)
for i in range(6):
pool.apply_async(func=hello, args=())
pool.close()
pool.join()
print 'Done!'
[root@localhost ~]$ vim 1.py
[root@localhost ~]$ python 1.py
hello world Tue Jan 29 05:27:45 2019
hello world Tue Jan 29 05:27:45 2019
hello world Tue Jan 29 05:27:46 2019
hello world Tue Jan 29 05:27:46 2019
hello world Tue Jan 29 05:27:47 2019
hello world Tue Jan 29 05:27:47 2019
Done!
多进程模块:multiprocessing的更多相关文章
- Python并发复习3 - 多进程模块 multiprocessing
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing,只需要定 ...
- 多进程模块 multiprocessing
由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. multiprocessing包是Python中的多进程 ...
- 关于python中的多进程模块multiprocessing
python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示: #!/usr/bin ...
- 多进程模块multiprocessing的使用
该模块提供如下功能: 建立并管理运行指定函数的子进程 基本接口: 1 Process(group, target, name, args[, kwargs]): 初始化子进程对象 2 p.daemon ...
- python学习笔记——multiprocessing 多进程模块Process
系统自带的fork模块创建的多进程是基于Linux或Unix平台的,而window平台并不支持: python中的multiprocess为跨平台版本的多进程模块,支持子进程.通信和共享数据.执行不同 ...
- python multiprocessing多进程模块
原文:https://blog.csdn.net/CityzenOldwang/article/details/78584175 多进程 Multiprocessing 模块 multiprocess ...
- python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型
线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- Python多进程库multiprocessing中进程池Pool类的使用[转]
from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...
- 多进程(multiprocessing module)
一.多进程 1.1 多进程的概念 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好 ...
随机推荐
- python 将txt内容写入excel
#!/usr/bin/env python # -*- coding: utf-8 -* import os import xlrd import xlwt import datetime impor ...
- URLConnection格式与用法
private void getdialog() { final EditText et = new EditText(this); final String workid = this.workid ...
- c# 操作Word总结【转】
http://www.cnblogs.com/eye-like/p/4121219.html 在医疗管理系统中为保存患者的体检和治疗记录,方便以后的医生或其他人查看.当把数据保存到数据库中,需要新建很 ...
- acrobat-网格-参考线-网格大小设置
视图--显示/隐藏--标尺及网格-网格/标尺: 网格:ctrl+U 标尺:ctrl+R 标尺: 网格: 标尺+网格: 网格大小设置: 编辑--首选项-单位和参考线 2013 ...
- 用JS的正则表达式如何判断输入框内为中文或者是英文
1.只能输入数字和英文的: <input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clip ...
- Linux 完整的修改用户名,用户组的方法记录
今天将虚拟机内所有的用户都是统一规划自己的名字,方便识别操作,特记录相关修改Linux 用户名以及修改用户组的方法 第一种方式,直接改相关文件: /etc/passwd 如图所示,改为自己想用户名,描 ...
- 经典SQL回顾之晋级篇
上篇博文在说SQL基础的时候,有一个地方有点误导大家,文中说到SQL 中的substring()和C#中的substring()相同,这有点歧义.基本原理虽然相同,但是有一点很不一样,就是C#中索引是 ...
- 【Qt Tips】QLineEdit内容过滤之setValidator和setInputMask浅析
1.QValidator分析 2.InputMask格式 3.测试代码和用例 项目路径: GitHub: https://github.com/Qunero/NeoQtTestDemo/tree/ma ...
- CSS圆角框,圆角提示框
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 没有启动 ASP.NET State service错误的解决方法
具体错误如下: 异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求.请确保已启动 ASP.NET State service,并且客户端和服务器端 ...