python进程的状态、创建及使用方法详解
本文实例讲述了python进程的状态、创建及使用方法。分享给大家供大家参考,具体如下:
进程以及状态
1.进程
程序:例如xxx.py这是程序,是一个静态的
进程:一个程序运行起来后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。
不仅可以通过线程完成多任务,进程也是可以的
2.进程的状态
工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态
- 就绪态:运行的条件都已经慢去,正在等在cpu执行
- 执行态:cpu正在执行其功能
- 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态
进程的创建-multiprocessing
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情
1.2个while循环一起执行
#-*-coding:utf-8-*- frommultiprocessingimportProcess importtime defrun_proc(): """子进程要执行的代码""" whileTrue: print("----2----") time.sleep(1) if__name__=='__main__': p=Process(target=run_proc) p.start() whileTrue: print("----1----") time.sleep(1)
说明
- 创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动
2.进程pid
#-*-coding:utf-8-*- frommultiprocessingimportProcess importos importtime defrun_proc(): """子进程要执行的代码""" print('子进程运行中,pid=%d...'%os.getpid())#os.getpid获取当前进程的进程号 print('子进程将要结束...') if__name__=='__main__': print('父进程pid:%d'%os.getpid())#os.getpid获取当前进程的进程号 p=Process(target=run_proc) p.start()
3.Process语法结构如下:
Process([group[,target[,name[,args[,kwargs]]]]])
- target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码
- args:给target指定的函数传递的参数,以元组的方式传递
- kwargs:给target指定的函数传递命名参数
- name:给进程设定一个名字,可以不设定
- group:指定进程组,大多数情况下用不到
Process创建的实例对象的常用方法:
- start():启动子进程实例(创建子进程)
- is_alive():判断进程子进程是否还在活着
- join([timeout]):是否等待子进程执行结束,或等待多少秒
- terminate():不管任务是否完成,立即终止子进程
Process创建的实例对象的常用属性:
- name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
- pid:当前进程的pid(进程号)
4.给子进程指定的函数传递参数
#-*-coding:utf-8-*- frommultiprocessingimportProcess importos fromtimeimportsleep defrun_proc(name,age,**kwargs): foriinrange(10): print('子进程运行中,name=%s,age=%d,pid=%d...'%(name,age,os.getpid())) print(kwargs) sleep(0.2) if__name__=='__main__': p=Process(target=run_proc,args=('test',18),kwargs={"m":20}) p.start() sleep(1)#1秒中之后,立即结束子进程 p.terminate() p.join()
运行结果:
子进程运行中,name=test,age=18,pid=45097...
{'m':20}
子进程运行中,name=test,age=18,pid=45097...
{'m':20}
子进程运行中,name=test,age=18,pid=45097...
{'m':20}
子进程运行中,name=test,age=18,pid=45097...
{'m':20}
子进程运行中,name=test,age=18,pid=45097...
{'m':20}
5.进程间不同享全局变量
#-*-coding:utf-8-*- frommultiprocessingimportProcess importos importtime nums=[11,22] defwork1(): """子进程要执行的代码""" print("inprocess1pid=%d,nums=%s"%(os.getpid(),nums)) foriinrange(3): nums.append(i) time.sleep(1) print("inprocess1pid=%d,nums=%s"%(os.getpid(),nums)) defwork2(): """子进程要执行的代码""" print("inprocess2pid=%d,nums=%s"%(os.getpid(),nums)) if__name__=='__main__': p1=Process(target=work1) p1.start() p1.join() p2=Process(target=work2) p2.start()
运行结果:
inprocess1pid=11349,nums=[11,22]
inprocess1pid=11349,nums=[11,22,0]
inprocess1pid=11349,nums=[11,22,0,1]
inprocess1pid=11349,nums=[11,22,0,1,2]
inprocess2pid=11350,nums=[11,22]
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。