2 进程multiprocessing [mʌltɪ'prəʊsesɪŋ] time模块
1.multiprocessing模块
- multiprocessing模块就是跨平台版本的多进程模块。
- multiprocessing模块提供了一个Process类来代表一个进程对象,

2.Process语法结构:
Process([group [, target [, name [, args [, kwargs]]]]])
target:表示这个进程实例所调用对象;
args:表示调用对象的位置参数元组;
kwargs:表示调用对象的关键字参数字典;
name:为当前进程实例的别名;
group:大多数情况下用不到;
Process类常用方法:
is_alive():判断进程实例是否还在执行;
join([timeout]):是否等待进程实例执行结束,或等待多少秒;
start():启动进程实例(创建子进程);
run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;
terminate():不管任务是否完成,立即终止;
Process类常用属性:
name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;
pid:当前进程实例的PID值;
1) Process(target=test)
from multiprocessing import Process
import time def test():
while True:
print("----test1---")
time.sleep(1) #Process() #实例化一个进程
p = Process(target=test)
p.start() #让这个进程开始执行test函数的代码 while True:
print("----main---")
time.sleep(1)
----main---
----test1---
----main---
----test1---
----main---
----test1---
- 该程序等待子进程执行完成才关闭
- fork创建的子进程,和程序没有关系,随便关闭
from multiprocessing import Process
import time def test():
for i in range(5):
print("----test1---")
time.sleep(1) p = Process(target=test)
p.start() #让这个进程开始执行test函数的代码
python@ubuntu:~/python06/03-多任务$ python3 13-Process创建的子进程和父进程的关系.py
----test1---
----test1---
----test1---
----test1---
----test1---
python@ubuntu:~/python06/03-多任务$
2)给target函数传递参数
from multiprocessing import Process
import os def test(num):
print("---pid=%d,ppid=%d,,num=%d"%(os.getpid(),os.getppid(),num)) p = Process(target=test,args=(100,))
p.start() print("---main-- pid=%d--"%os.getpid())
---main-- pid=2789--
---pid=2790,ppid=2789,,num=100
3) join 堵塞
from multiprocessing import Process
import os
import random
import time def test():
for i in range(random.randint(1,5)):
print("---test--%d"%i)
time.sleep(1) p = Process(target=test) p.start() p.join() #堵塞 #等待子进程结束,再往下走
#p.join(1) #超时时间1s #关门狗 p.terminate() #不管任务是否完成,就终止 print("---main-- pid=%d--"%os.getpid())
2.进程的创建-Process子类
- 简单工厂模式:父类提供接口,子类自己实现方法
from multiprocessing import Process
import time class MyNewProcess(Process):
def run(self): #父类的start()方法调用run方法
while True:
print("----1--")
time.sleep(1) p = MyNewProcess()
p.start() #父类方法有start() while True:
print("----main---")
time.sleep(1)
----main---
----1--
----main---
----1--
----main---
----1--
- time模块
In [1]: import time In [2]: time.ctime() #格式化时间
Out[2]: 'Sat Dec 2 17:28:18 2017' In [3]: time.sleep(1) #休眠1s In [4]: time.time() #linux 1970年到现在多少秒
Out[4]: 1512206917.624274 ##计算一个程序花费的时间time.time() In [5]: start_time = time.time() In [6]: start_time
Out[6]: 1512206924.3197203 In [7]: end_time = time.time() In [8]: end_time
Out[8]: 1512206933.599762 In [9]: run_time = end_time - start_time In [10]: run_time
Out[10]: 9.280041694641113
打印进度条
import time
for i in range(1,101):
print("\r%.2f%%"%i, end='')
time.sleep(0.01) print("")

3.进程池
- 上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。
from multiprocessing import Pool
import os
import random
import time def worker(num):
for i in range(5):
print("===pid=%d==num=%d="%(os.getpid(), num))
time.sleep(1) #3表示 进程池中对多有3个进程一起执行
pool = Pool(3) for i in range(10):
print("---%d---"%i)
#向进程池中添加任务
#注意:如果添加的任务数量超过了 进程池中进程的个数的话,那么不会导致添加不进入
# 添加到进程中的任务 如果还没有被执行的话,那么此时 他们会等待进程池中的
# 进程完成一个任务之后,会自动的去用刚刚的那个进程 完成当前的新任务
pool.apply_async(worker, (i,)) pool.close()#关闭进程池,相当于 不能够再次添加新任务了
pool.join()#主进程 创建/添加 任务后,主进程 默认不会等待进程池中的任务执行完后才结束
#而是 当主进程的任务做完之后 立马结束,,,如果这个地方没join,会导致
#进程池中的任务不会执行
--0---
---1---
---2---
---3---
---4---
---5---
---6---
---7---
---8---
---9---
===pid=3036==num=0=
===pid=3035==num=1=
===pid=3037==num=2=
===pid=3037==num=2=
===pid=3036==num=0=
===pid=3035==num=1=
===pid=3036==num=0=
===pid=3037==num=2=
===pid=3035==num=1=
===pid=3037==num=2=
===pid=3036==num=0=
===pid=3035==num=1=
===pid=3036==num=0=
===pid=3037==num=2=
===pid=3035==num=1=
===pid=3035==num=3=
===pid=3037==num=4=
===pid=3036==num=5=
===pid=3035==num=3=
===pid=3036==num=5=
===pid=3037==num=4=

2 进程multiprocessing [mʌltɪ'prəʊsesɪŋ] time模块的更多相关文章
- Python 线程(threading) 进程(multiprocessing)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- 获取当前进程目录 GetCurrentDirectory() 及 获取当前运行模块路径名GetModuleFileName()
GetCurrentDirectory 获得的是当前进程的活动目录(资源管理器决定的),可以用SetCurrentDirectory 修改的. 转自 http://m.blog.csdn.net/bl ...
- python 进程 multiprocessing模块
一.multiprocess.process模块 1.process类 Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得 ...
- 进程 multiprocessing Process join Lock Queue
多道技术 1.空间上的复用 多个程序公用一套计算机硬件 2.时间上的复用 cpu 切换程序+保存程序状态 1.当一个程序遇到IO操作,操作系统会剥夺该程序的cpu执行权限(提高了cpu的利用率,并且不 ...
- Python: 多进程的分布式进程multiprocessing.managers
multiprocessing.managers 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分 ...
- 进程 multiprocessing详解
一 ,核心 就是像线程一样管理进程 ,类似于threading ,cup利用率较好,该模块用来跨平台的多进程模块,含有一个Process 类代表进程对象,start() 启动进程 Process语法结 ...
- 创建进程池与线程池concurrent.futures模块的使用
一.进程池. 当并发的任务数量远远大于计算机所能承受的范围,即无法一次性开启过多的任务数量就应该考虑去 限制进程数或线程数,从而保证服务器不会因超载而瘫痪.这时候就出现了进程池和线程池. 二.conc ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- 进程管理02 通过PEB枚举进程所有模块
0x01 结构探究 先在win7 x86下通过windbg来探究通过peb来得到进程模块的步骤: 命令!process 0 0 exeplorer.exe 先获取到explorer.exe的EPRO ...
随机推荐
- 在.Net项目中使用Redis作为缓存服务
转自:http://www.cnblogs.com/hohoa/p/5771255.html 最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写 ...
- POJ 1845 Sumdiv 【二分 || 逆元】
任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...
- 【SPJ6285 NGM2 - Another Game With Numbers】 题解
题目链接:https://www.luogu.org/problemnew/show/SP6285 唉好久之前校内模拟赛的题目 嘴上说着明白但是实现起来我的位运算太丑陋了啊! #include < ...
- iOS8以后UIAlertView和UIActionSheet两种alert页面都将通过UIAlertController来创建
1. Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated. ...
- js和jquery对象的相互转换
在使用jquery的过程中发现很多需要将jquery对象转成js对象的例子. Query 对象是通过 jQuery 包装DOM 对象后产生的对象.jQuery 对象是 jQuery 独有的,其可以使用 ...
- 课时22.br标签(掌握)
br标签,如何在html中换行,可以使用br标签 1.br标签的作用:换行 2.br标签的格式:<br> 3.br标签的注意点: 3.1多个br标签可以连续使用,使用了多个br标签就会换多 ...
- DQL-常见的函数
一.概述功能:类似于java中的方法好处:提高重用性和隐藏实现细节调用:select 函数名(实参列表); 二:常用的函数: ① 单行函数 1.分组函数 1.sum(),avg(),max(),min ...
- Jquery中on绑定事件 点击一次 执行多次 的解决办法
举个例子,在同一个页面有下拉选择框 <select class="mySelect"> <option value="user">按用户 ...
- python drf+xadmin+react+dva+react-native+sentry+nginx 搭建前后端分离的博客完整平台
前言: 经过差不多半年的开发,搭建从前端到服务器,实现了前后端分离的一个集PC端.移动端的多端应用,实属不易,今天得空,好好写篇文章,记录这些天的成果.同时也做个分享. 演示网站地址: http:// ...
- 竞赛题解 - Palisection(CF-17E)
Palisection(CF-17E) - 竞赛题解 Manacher学到一定程度,也需要练一下有趣的题了-- (这是多老的题了 \(QwQ\))[传送门] 『题意』 给出一个字符串,求总共有多少对不 ...