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 ...
随机推荐
- [原]SDL开发教程
SDL开发库:http://www.libsdl.org/ SDL中文开发教程:http://tjumyk.github.io/sdl-tutorial-cn/index.html SDL英文版开发教 ...
- [原创] 腾讯RTX二次开发相关的一些注意事项
在企业即时通信方面,腾讯的RTX在国内的占有率应该是很高的 所以,就避免不了要与其他系统进行消息集成 腾讯为此提供了二次开发的工具包,支持JAVA.C#.VB等多种开发语言 但是,目前为止,腾讯官方提 ...
- mxnet 神经网络训练和预测
https://mxnet.incubator.apache.org/tutorials/basic/module.html import logging import random logging. ...
- CF#538(div 2) C. Trailing Loves (or L'oeufs?) 【经典数论 n!的素因子分解】
任意门:http://codeforces.com/contest/1114/problem/C C. Trailing Loves (or L'oeufs?) time limit per test ...
- mapper.xml中动态sql抽取重复项
mabatis重点是通过标签对sql灵活的组织,通过配置的方式完成输入 输出映射. 1.对mapper.xml中重复的sql抽取统一维护,以及foreach使用 UserMapperCustom.xm ...
- POJ 3216 Prime Path(打表+bfs)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27132 Accepted: 14861 Desc ...
- 第24章 QSPI—读写串行FLASH
本章参考资料:<STM32F76xxx参考手册>.<STM32F76xxx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>及<S ...
- asp.net mvc5 step by step(一)——CURD增删查改Demo
1. 新建一个项目:
- Oracle中order by case 用法
select * from ly_familyinformation ' ' order by case when relation = '购房人/申请人' then when relation = ...
- window系统mysql无法输入和无法显示中文的处理配置
第一步:使用记事本打开mysql安装目录下的"my.ini”文件. # MySQL client library initialization. [client] port= [mysql] ...