发布时间:2019-08-29 07:39:36编辑:auto阅读(1523)
#fork在window下不支持
import os import time import sys pid = os.fork() if pid == 0:#子进程 time.sleep(5) print('After 5 seconds') print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid())) else:#主进程 print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid())) pid = os.fork() if pid == 0: print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid())) else: print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid())) pid = os.fork() if pid == 0: print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid())) else: print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))
line11:fork进程1625,PID=1624,父PID=1486
line16:fork进程1626,PID=1624,父PID=1486
line14:fork进程0,PID=1626,父PID=1624
line21:fork进程1628,PID=1626,父PID=1624
line21:fork进程1627,PID=1624,父PID=1486
line19:fork进程0,PID=1627,父PID=1624
[chaoge@localhost ~]$ line19:fork进程0,PID=1628,父PID=1
After 5 seconds
line9:fork进程0,PID=1625,父PID=1
line21:fork进程1629,PID=1625,父PID=1
line19:fork进程0,PID=1629,父PID=1625
#Process 可以跨平台
from multiprocessing import Process import time import os #子进程 def childProcess(name): print("子进程运行中,name=%s,pid=%d"%(name,os.getpid())) if __name__ == '__main__': print('父进程%d.'%os.getpid()) cp = Process(target=childProcess,args=('test',)) print('子进程将要执行') cp.start()#启动进程实例 #cp.terminate()#终止子进程 alive = cp.is_alive()#判断进程是否活着 print('is_alive:%s'%alive) cp.join()#阻塞,join([timeout]),join(2)阻塞2秒 print('子进程结束') alive = cp.is_alive()#判断进程是否活着 print('is_alive:%s'%alive)
父进程7268.
子进程将要执行
is_alive:True
子进程运行中,name=test,pid=3124
子进程结束
is_alive:False
#进程池
from multiprocessing import Pool import os,time,random def worker(msg): t_start = time.time() print('%s开始执行,进程号为%d'%(msg,os.getpid())) #random.random() 随机生成0~1之间的浮点数 time.sleep(random.random()*2) t_stop = time.time() print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start)) if __name__ == '__main__': po = Pool(3)#定义一个进程池,进程数3 for i in range(0,10): po.apply_async(worker,(i,))#po.apply_async(worker,(i,))非阻塞模式,po.apply(worker,(i,))阻塞模式 print("---start---") po.close()#关闭进程池 po.join()#等待po中的所有子进程执行完,放在close之后 print('---end---')
---start---
0开始执行,进程号为1910
2开始执行,进程号为1912
1开始执行,进程号为1911
0 执行完毕,耗时0.49
3开始执行,进程号为1910
1 执行完毕,耗时0.64
4开始执行,进程号为1911
3 执行完毕,耗时0.26
5开始执行,进程号为1910
2 执行完毕,耗时1.28
6开始执行,进程号为1912
4 执行完毕,耗时0.97
7开始执行,进程号为1911
5 执行完毕,耗时1.38
8开始执行,进程号为1910
6 执行完毕,耗时1.49
9开始执行,进程号为1912
8 执行完毕,耗时1.21
7 执行完毕,耗时1.81
9 执行完毕,耗时1.72
---end---
上一篇: python (1)
下一篇: Python类
47879
46443
37333
34772
29344
26007
24960
19976
19578
18074
5821°
6448°
5962°
5987°
7093°
5937°
5977°
6471°
6435°
7817°