python守护多线程_Python多线程Threading、子线程与守护线程实例详解
線程Threading:
python中多線程需要使用threading模塊
線程的創建與運行:
1.直接調用threading的Thread類:
線程的創建:線程對象=thread.Thread(target=函數名,args=(參數))【補充,由于args是一個元組,單個參數時要加“,”】
線程的啟動:線程對象.start(),調用start(),那么線程對象會自動去調用thread.Thread中的run()
讓主線程等待其余線程結束:線程對象.join(),加了join之后,相當于阻塞了主線程,主線程只有當join的線程結束后才會向下執行
import threading,time
def run(n):
time.sleep(1)
print("task ",n)
t1=threading.Thread(target=run,args=("t1",))
t2 = threading.Thread(target=run,args=("t2",))
start_time=time.time()#開始時間
t1.start()
t2.start()
##因為是獨立線程,如果想要主線程等待其他線程運行完畢,需要使用join
t1.join()
t2.join()
spend_time=time.time()-start_time
print(spend_time)##1.0多,說明是并行的結果
附加說明--join是阻塞等待:
import threading,time
class MyTread(threading.Thread):
def __init__(self,name):
super(MyTread,self).__init__()#調用父類的__init__()
self.name=name
def run(self):#重寫方法,按自己的要求去寫
time.sleep(1)
print("run in task",self.name,threading.current_thread(),threading.active_count())
t1=MyTread("t1")
t2=MyTread("t2")
start_time=time.time()
t1.start()
t2.start()
t1.join()
t2.join()
time.sleep(1)###主線程等待其余線程結束
print(time.time()-start_time)
#結果是2.0多,證明是join是相當于阻塞了主線程的執行,只有當線程結束后才會向下執行
2.繼承threading的Thread類:
繼承threading的Thread類的類要主要做兩件事:
1.如果不做自定義變量的初始化,那么可以直接使用繼承的父類的__init__(),如果需要做自定義變量的初始化,則需要先調用父類的__init__()【否則需要自己填寫線程初始化相關的參數】
2.重寫run,雖然繼承了父類的run,但實際上如果不重寫,那么我們繼承threading的Thread類又有什么意義呢?為什么不直接調用threading的Thread類
總結
以上是生活随笔為你收集整理的python守护多线程_Python多线程Threading、子线程与守护线程实例详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python csdn技术社区_CSDN
- 下一篇: 前端获取浏览器标识_浏览器缓存机制