进程线程补充
- 显示当前进程或线程
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}
---主进程结束---