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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值