博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python进程专题2:multiprocessing创建进程
阅读量:6273 次
发布时间:2019-06-22

本文共 2347 字,大约阅读时间需要 7 分钟。

上一篇文章:
下一篇文章:

由于fork()无法对Windows使用,而python是跨平台的,显然需要一个新的跨平台替代品来代替它,那就是multiprocessing模块。

multiprocessing模块中使用Process类来代表进程。

语法:Process([group,target,name,args,kwargs])group:至今还未使用,值始终为Nonetarget:进程实例所调用的对象,一般表示子进程要调用的函数。args:表示调用对象的参数,一般是函数的参数kwargs:表示调用对象的关键字参数字典。name:当前进程实例的别名

Process类常用方法:

p.is_alive():判断进程是否还在运行。如果还在运行,返回true,否则返回falsep.join([timeout]):等待进程实例执行完毕,或等待多少秒p.run():默认会调用target指定的对象,如果没有给定target参数,对该进程对象调用start()方法时,就会执行对象中的run()方法p.start():启动进程实例(创建子进程),病运行子进城的run方法p.terminate():不管任务是否完成,立即终止,同时不会进行任何的清理工作,如果进程p创建了它自己的子进程,这些进程就会变成僵尸进程,使用时特别注意,如果p保存了一个锁或者参与了进程间通信,那么使用该方法终止它可能会导致死锁或者I/O损坏。

Process类常用属性:

p.daemon:布尔值,指示进程是否是后台进程。当创建它的进程终止时,后台进程会自动终止。并且,后台进程无法创建自己的新进城。注意:p.daemon的值必须在p.start方法调用前设置。p.exitcode:进程的整数退出指令。如果进程仍然在运行,它的值为None,如果值为负数:—N,就表示进程由信号N所终止。p.name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数。p.pid:当前进程实例的PID

实例1:理解单独创建进程的相关函数

#该实例是用来理解单独创建进程的实例from multiprocessing import Processimport os,time#将要在子进程中运行的方法def test(name,interval):    for i in range(interval):        print("子进程运行中,name=%s,pid=%d,父进程:%d"%(name,os.getpid(),os.getppid()))        time.sleep(interval)if __name__=="__main__":    print("父进程%d"%os.getpid())    #创建进程实例,第一个参数传要在子线程执行的函数,第二个参数传函数需要的参数    p=Process(target=test,args=('mark',2))    print("子进程要执行了")    #启动进程    p.start()    p.join()#等待子进程运行结束再继续执行下面语句    print("子进程结束了")

结果:

父进程17756子进程要执行了子进程运行中,name=mark,pid=17758,父进程:17756子进程运行中,name=mark,pid=17758,父进程:17756子进程结束了

实例2:两个进程同时运行

from multiprocessing import Processimport osimport timedef test1(interval):    print("test1子进程运行中,pid=%d,父进程:%d"%(os.getpid(),os.getppid()))    t_start=time.time()    time.sleep(interval)    t_end=time.time()    print("test1执行时间:%0.2f秒"%(t_end-t_start))def test2(interval):    print("test2子进程运行中,pid=%d,父进程:%d"%(os.getpid(),os.getppid()))    t_start=time.time()    time.sleep(interval)    t_end=time.time()    print("test2执行时间:%0.2f秒"%(t_end-t_start))if __name__=="__main__":    print("父进程%d"%os.getpid())    #创建进程实例,第一个参数传要在子线程执行的函数,第二个参数传函数需要的参数    p1=Process(target=test1,args=(1,))    p2=Process(target=test2,name="mark1",args=(2,))    #启动进程    p1.start()    p2.start()    print("p2是否在运行:",p2.is_alive())    p2.join()#等待子进程运行结束再继续执行下面语句    print("p2是否在运行:", p2.is_alive())

结果:

父进程15080p2是否在运行: Truetest1子进程运行中,pid=15081,父进程:15080test2子进程运行中,pid=15082,父进程:15080test1执行时间:1.00秒test2执行时间:2.00秒p2是否在运行: False

转载地址:http://zelpa.baihongyu.com/

你可能感兴趣的文章
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
拥抱白帽黑客,通用宣布安全漏洞报告项目
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
《Java多线程编程核心技术》——1.8节暂停线程
查看>>
阿里感悟(十八)- 应届生Review
查看>>
《计算广告:互联网商业变现的市场与技术》一第一部分 在线广告市场与背景...
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>