本文实例讲述了Python3.5多进程原理与用法。分享给大家供大家参考,具体如下:
进程类:Process
示例及代码:
(1)创建函数作为单进程
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu import multiprocessing import time #创建函数并将其作为单个进程 def worker(interval): n = 5 #进程数 while n>0: print("The time is :{0}".format(time.ctime())) #初始化时间 time.sleep(interval) #睡眠时间 n-=1 if __name__ == "__main__": # 创建进程,target:调用对象,args:传参数到对象 p = multiprocessing.Process(target=worker,args=(2,)) p.start() #开启进程 print("进程号:",p.pid) print("进程别名:",p.name) print("进程存活状态:",p.is_alive())
运行结果:
进程号: 6784
进程别名: Process-1
进程存活状态: True
The time is :Wed Nov 1 10:59:03 2017
The time is :Wed Nov 1 10:59:05 2017
The time is :Wed Nov 1 10:59:07 2017
The time is :Wed Nov 1 10:59:09 2017
The time is :Wed Nov 1 10:59:11 2017
(2)创建函数作为多进程
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu import multiprocessing import time #创建函数作为多进程 def work1(interval): print("work1...") time.sleep(interval) print("end work1...") def work2(interval): print("work2...") time.sleep(interval) print("end work2...") def work3(interval): print("work3...") time.sleep(interval) print("end work3...") if __name__ == "__main__": p1 = multiprocessing.Process(target=work1,args=(1,)) p2 = multiprocessing.Process(target=work2,args=(2,)) p3 = multiprocessing.Process(target=work3,args=(3,)) p1.start() p2.start() p3.start() print("The number of CPU is %d:"%(multiprocessing.cpu_count())) #打印CPU核数 for p in multiprocessing.active_children(): #循环打印子进程的名称和pid print("子进程名称:%s,子进程pid:%d" %(p.name,p.pid)) print("ending....")
运行结果:
The number of CPU is 4:
子进程名称:Process-2,子进程pid:7108
子进程名称:Process-1,子进程pid:1896
子进程名称:Process-3,子进程pid:7952
ending....
work3...
work1...
work2...
end work1...
end work2...
end work3...
注:先运行主进程的内容,再运行子进程
(3)将进程定义成一个类
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu import multiprocessing import time #将进程定义为一个类 class ClockProcess(multiprocessing.Process): def __init__(self,interval): multiprocessing.Process.__init__(self) #重构了Process类里面的构造函数 self.interval = interval def run(self): #固定用run方法,启动进程自动调用run方法 n = 5 while n>0: print("The time is {0}".format(time.ctime())) time.sleep(self.interval) n-=1 if __name__ == "__main__": p = ClockProcess(2) p.start()
运行结果:
The time is Wed Nov 1 11:31:28 2017
The time is Wed Nov 1 11:31:30 2017
The time is Wed Nov 1 11:31:32 2017
The time is Wed Nov 1 11:31:34 2017
The time is Wed Nov 1 11:31:36 2017
(4)Queue(队列)实现多进程数据传输
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu import multiprocessing #Queue是多进程安全的队列,可以使用实现多进程之间的数据传递 def writer_proc(q): try: q.put(1,block=False) #put方法插入数据到队列中 except: pass def reader_proc(q): try: print(q.get(block=False)) #get方法从队列中读取并删除一个元素 except: pass if __name__ == "__main__": q = multiprocessing.Queue() writer = multiprocessing.Process(target=writer_proc,args=(q,)) writer.start() reader = multiprocessing.Process(target=reader_proc,args=(q,)) reader.start() reader.join() writer.join()
运行结果:
1
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 班得瑞原装进口《第五张新世纪专辑:迷雾森林+EP》1CD[APE/CUE分轨][334.2MB]
- 田震.1997-顺其自然(日版)【红星生产社】【WAV+CUE】
- 小虫.1996-想得太美【滚石】【WAV+CUE】
- 谢采妘.2016-邓丽君名曲专辑【丰荣】【WAV+CUE】
- 张含韵.2007-一人一梦【天中文化】【WAV+CUE】
- 蟑螂乐队.1999-帮个忙【福茂】【WAV+CUE】
- 张宇.2001-替身【EMI百代】【WAV+CUE】
- 班得瑞原装进口《第六张新世纪专辑:日光海岸》1CD[APE/CUE分轨][339.5MB]
- 班得瑞原装进口《第七张新世纪专辑:梦花园》1CD[APE/CUE分轨][331.4MB]
- 班得瑞原装进口《第八张新世纪专辑:琉璃湖畔》1CD[APE/CUE分轨][286.4MB]
- 魏如萱.2011-在哪里(EP)【添翼创越】【WAV+CUE】
- 群星.1981-新金曲奖·青年创作园地12合辑(喜玛拉雅复刻版)【歌林】【WAV+CUE】
- 麦洁文.1989-新曲与精丫新艺宝】【WAV+CUE】
- SNH48《薄荷糖 (Mint Candy)》[320K/MP3][33.72MB]
- SNH48《薄荷糖 (Mint Candy)》[FLAC/分轨][78.59MB]