Python3.5——多进程

来源:互联网 发布:奥拉星拥有全知之眼 编辑:程序博客网 时间:2024/06/10 17:01

进程类:Process


示例及代码:


(1)创建函数作为单进程

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuimport multiprocessingimport time#创建函数并将其作为单个进程def worker(interval):    n = 5       #进程数    while n>0:        print("The time is :{0}".format(time.ctime()))      #初始化时间        time.sleep(interval)        #睡眠时间        n-=1if __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进程存活状态: TrueThe time is :Wed Nov  1 10:59:03 2017The time is :Wed Nov  1 10:59:05 2017The time is :Wed Nov  1 10:59:07 2017The time is :Wed Nov  1 10:59:09 2017The time is :Wed Nov  1 10:59:11 2017

(2)创建函数作为多进程

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuimport multiprocessingimport 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:7952ending....work3...work1...work2...end work1...end work2...end work3...

注:先运行主进程的内容,再运行子进程

(3)将进程定义成一个类

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuimport multiprocessingimport 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-=1if __name__ == "__main__":    p = ClockProcess(2)    p.start()#运行结果:The time is Wed Nov  1 11:31:28 2017The time is Wed Nov  1 11:31:30 2017The time is Wed Nov  1 11:31:32 2017The time is Wed Nov  1 11:31:34 2017The time is Wed Nov  1 11:31:36 2017

(4)Queue(队列)实现多进程数据传输

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuimport multiprocessing#Queue是多进程安全的队列,可以使用实现多进程之间的数据传递def writer_proc(q):    try:        q.put(1,block=False)        #put方法插入数据到队列中    except:        passdef reader_proc(q):    try:        print(q.get(block=False))        #get方法从队列中读取并删除一个元素    except:        passif __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