进程线程补充

  • 显示当前进程或线程
multiprocessing.current_process()#显示当前进程
threading.current_thread()#显示当前线程
  • join等待:子进程或子线程结束后再执行主进程或主线程
pro_name.join()
thr_name.join()
  • 中止进程:在主进程遇到这个会自动中止所开的进程,线程不能中途中止,必须等到自己结束或异常被迫中止。
pro_name.terminate()
  • 查看进程或线程id:每一个开启执行的进程或线程都有唯一的id来识别,这里要注意是开启且执行,若实例化但未开启,会返回None
multiprocessing.current_process().pid#主进程的id
pro_name.pid#子进程的id
threading.current_thread().ident#主线程的id
thr_name.ident#子线程的id
  • 给进程或线程取别名:取别名有两种方式,可以在显示当前进程或线程中查看到你取的别名。
pro = multiprocessing.Process(target = func,name = "xxx")#实例化时取别名
pro_name.name = "xxx"#实例化后,开启前,利用name属性直接修改

thr = threading.Thread((target = func,name = "xxx")#实例化时取别名
thr_name.name = "xxx"#实例化后,开启前,利用name属性直接修改
 
  • 查看当前进程或线程的状态:正在执行的话返回True,执行完或还没开启就返回False。
pro_name.is_alive() #查看进程的生存状态

thr_name.is_alive() #查看线程的生存状态
  • 开启守护进程或线程:守护进程或线程的意思是在主进程或线程结束后,子进程或子线程会自动中止退出。
multiprocessing.Process(target=func,daemon=True)#开启进程守护

threading.Thread(target=func,daemon=True)#开始线程守护

 面向对象化使用线程和进程

这里以进程为例

关键点:

  • 继承Process类
  • 重写__init__方法
  • 重写__run__方法

进程开启时会自动调用类中的run方法,而target的函数是由默认的run运行的。

import multiprocessing
import time

class Myprocess(multiprocessing.Process):
    def __init__(self,*args,**kwargs):
        super().__init__()
        self.a = args
        self.b = kwargs
        self.name = "wl"
        self.start()
    def run(self):
        print(multiprocessing.current_process())#打印当前进程
        print(self.pid)#打印当前进程id
        print(self.a)
        print(self.b)

if __name__ == '__main__':
   print("---主进程开始---")
   pro = Myprocess(1,2,3,a=1,b=2,c=3)
   time.sleep(2)
   print("---主进程结束---")
---主进程开始---
<Myprocess(wl, started)>
14848
(1, 2, 3)
{'a': 1, 'b': 2, 'c': 3}
---主进程结束---

 

posted @ 2018-10-24 19:47  龙~白  阅读(129)  评论(0编辑  收藏  举报