【Python】继承Process类创建进程

对于一些简单的小任务,通常使用Process(target=test)。但是如果要处理复杂任务的进程,通常定义一个类,使其继承Process类,每次实例化这个类的时候,就等同于实例化一个进程对象。
使用Process子类创建2个子进程,分别输出父、子进程的PID,以及每个子进程的状态和运行时间,代码如下:

# -*-coding:utf-8 -*-
# 继承Process类
# print("------------继承Process类--------------")
class SubProcess(Process):
    # 由于Process类本身也有__init__初始犯法,这个子类相当是重写了父类这个方法
    def __init__(self, interval, name=""):
        Process.__init__(self)  # 调用父类初始化方法
        self.interval = interval
        if name:
            self.name = name

    # 重写了Process类的run()方法
    def run(self):
        print("子进程(%s) 开始执行,父进程为(%s)" % (os.getpid(), os.getppid()))
        t_start = time.time()
        time.sleep(self.interval)
        t_stop = time.time()
        print("子进程(%s)执行结束,耗时%0.2f秒" % (os.getpid(), t_stop - t_start))


if __name__ == "__main__":
    print("---------父进程开始执行--------")
    print("父进程PID:%s" % os.getpid())
    p1 = SubProcess(interval=1, name='mrsoft')
    p2 = SubProcess(interval=2)
    # 对一个不帮韩target属性的Process类执行start方法,就会运行这个类中的run方法
    # 故这里会执行p1.run()
    p1.start()
    p2.start()
    # 输出p1和p2的进程的执行状态,如果真正进行,返回True
    print("p1.is_alive=%s" % p1.is_alive())
    print("p2.is_alive=%s" % p2.is_alive())
    # 输出p1和p2进程的别名和PID
    print("p1.name=%s" % p1.name)
    print("p1.pid=%s" % p1.pid)
    print("p2.name=%s" % p2.name)
    print("p2.pid=%s" % p2.pid)
    print("----------等待子进程----------")
    p1.join()
    p2.join()
    print("-----------父进程结束----------")

上述代码中,定义了一个SubProcess类,继承了multiprocessing.Process类。SubProcess子类中定义了两个方法:init()初始方法和run()方法。在__init__()初始方法中,调用multiprocess.Process类的__init__()初始化方法,否则父类初始化方法会被覆盖,无法开启进程。此外,SubProcess子类中没有定义start()方法,但是在主进程中调用了start()方法,此时就会自动执行SubProcess中的run()方法

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值