1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?python并发编程?>?当前文章

      python并发编程

      通过Process子类创建进程

      2019-06-06 148赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        在面向对象中我们知道一个类通过继承父类可以拥有父类的属性和方法,既然Process类负责创建进程,那么我们自定义一个类继承Process类是不是也就具备创建进程的能力呢?必然如此!但是有些事项需要注意:

        1)Process类本身也有__init__方法,定义一个子类相当于重写了这个方法,

        2)重写__init__方法就会带来一个问题,我们可能不会完全初始化一个Process类,因为Process类的构造方法中可能会做一些初始化的操作。

        3)最好的方法就是将子类本身加上Process.__init__方法或者super().__init__(),完成这些初始化操作。

        通过继承的方式创建进程可以使得程序写起来更加灵活多变!可以练习2个小试牛刀:

      # ‐*‐ coding: utf‐8 ‐*‐
      
      from multiprocessing import Process
      import time
      import os
      
      
      # 继承Process类
      class ProcessSon(Process):
      
          def __init__(self,interval):
              Process.__init__(self)
              self.interval = interval
      
          # 重写了Process类的run()方法
          def run(self):
              print("子进程(%s) 开始执行,父进程为(%s)" % (os.getpid(),os.getppid()))
              t_start = time.time()
              print("子进程要休眠{}秒".format(self.interval))
              time.sleep(self.interval)
              t_stop = time.time()
              print("子进程(%s)结束,耗时%d秒" % (os.getpid(),t_stop-t_start))
      
      
      if __name__=="__main__":
      
          print("当前程序进程(%s)" % os.getpid())
          p1 = ProcessSon(2)
          # 一个不包含target属性的Process类执行start()方法,就会运行这个类中的run()方法.
          p1.start()
          p1.join()
          print("主进程(%s)执行结束" % os.getpid())
      
      
      D:installpython3python.exe D:/pyscript/test/test2.py
      当前程序进程(7736)
      子进程(9564) 开始执行,父进程为(7736)
      子进程要休眠2秒
      子进程(9564)结束,耗时2秒
      主进程(7736)执行结束
      
      Process finished with exit code 0
      
      # ‐*‐ coding: utf‐8 ‐*‐
      
      import multiprocessing
      import os
      
      
      class MyProcess(multiprocessing.Process):
      
          def __init__(self, num):
              self.num = num
              super().__init__()
      
          def run(self):
              for i in range(self.num):
                  print("(%s)子进程(父进程:(%s)):%d" %
                      (os.getpid(), os.getppid(), i))
      
      
      if __name__ == '__main__':
      
          # 下面是主程序(也就是主进程)
          for i in range(5):
              print("(%s)主进程: %d" % (os.getpid(), i))
              if i == 2:
                  # 创建并启动第一个进程
                  mp1 = MyProcess(3)
                  mp1.start()
                  mp1.join()
                  # 创建并启动第一个进程
                  mp2 = MyProcess(3)
                  mp2.start()
                  mp2.join()
          print('(%s)主进程执行完成!' % (os.getpid()))
      
      
      D:installpython3python.exe D:/pyscript/test/test2.py
      (10564)主进程: 0
      (10564)主进程: 1
      (10564)主进程: 2
      (9460)子进程(父进程:(10564)):0
      (9460)子进程(父进程:(10564)):1
      (9460)子进程(父进程:(10564)):2
      (10900)子进程(父进程:(10564)):0
      (10900)子进程(父进程:(10564)):1
      (10900)子进程(父进程:(10564)):2
      (10564)主进程: 3
      (10564)主进程: 4
      (10564)主进程执行完成!
      
      Process finished with exit code 0
      

      文章评论

      通过Process子类创建进程文章写得不错,值得赞赏
      国产99视频精品免视看6