threading模塊
多線程和多進程都可以很容易的實現並發,協程通過切換上下文來充分利用cpu實現並發效果
threading模塊
Thread類的基本狀態和行為
屬性名和值:
name=None,group=None,target=None,args=(),kwargs={},daemon=None
方法:
start(),join(),run(), join()
使主線程等待使用join()方法的子進程結束,否則阻塞自己 ,
Thread中的子進程默認daemon就是None,這意味著子進程不結束,主進程也不結束,說明主進程是個好大哥,
而thread模塊開啟的子進程就沒這個命,主進程結束,子進程跟著完蛋。
join()方法:
效果 :使主線程等待使用join()方法的子線程結束,否則阻塞自己 ,
使用場景:主線程需要接受子線程的計算結果時使用
守護線程是指不重要的進程,如果Thread實例化子進程的時候將其設置成守護進程,主線程結束時,將結束子線程。
子進程的創建與運行,分為三種方式,
-實例化Thread,target=自定義函數
-實例化Thread,target=自定義類,start()這個實例時,會自動調用自定義類的__call__()方法,所以,自定義類必須要自定義__call__()方法。
-自定義創建一個Thread的派生子類,然後自定義其run()方法,然後實例化這個類,然後調用其start()方法,
-需要註意,實例化子進程使用一次,不能再次調用start()方法
主要使用第一種方法,和第三種方法
給出第三種方法的例子
import time, threading import threading,timeclass Mythread(threading.Thread): def __init__(self,args): threading.Thread.__init__(self) self.args=args def do_1(self): print(‘我是do_1 我是做好事‘) def do_2(self): print(‘我是do_2 我是做傻事‘) def do_3(self): print(‘我是do_3 我是做壞事‘) def run(self): time.sleep(1) if self.args % 3==0: self.do_1() if self.args % 3==1: self.do_2() if self.args % 3==2: self.do_3() if __name__ == ‘__main__‘: for i in range(20): t = Mythread(i) t.start() print(‘大哥已經完事,等小弟們‘) 運行結果:
大哥已經完事,等小弟們
我是do_2 我是做傻事
我是do_1 我是做好事
我是do_3 我是做壞事
我是do_1 我是做好事
我是do_2 我是做傻事
我是do_3 我是做壞事
我是do_1 我是做好事
我是do_1 我是做好事
我是do_2 我是做傻事
我是do_2 我是做傻事
我是do_3 我是做壞事
我是do_1 我是做好事
我是do_3 我是做壞事
我是do_2 我是做傻事
我是do_3 我是做壞事
我是do_2 我是做傻事
我是do_1 我是做好事
我是do_2 我是做傻事
我是do_3 我是做壞事
我是do_1 我是做好事
類方法:
active_count():存活的線程數量,可以用來並發線程速度
cuttent_thread():返回當前環境的Thread對象
enumerate():返回活動的Thread對象列表,
[<_MainThread(MainThread, started 28388)>, <Mythread(Thread-1, started 21276)>, <Mythread(Thread-2, started 29028)>, <Mythread(Thread-3, started 29528)>, <Mythread(Thread-4, started 19448)>, <Mythread(Thread-5, started 26416)>, <Mythread(Thread-6, started 22084)>, <Mythread(Thread-7, started 31032)>, <Mythread(Thread-8, started 24824)>, <Mythread(Thread-9, started 14076)>, <Mythread(Thread-10, started 31076)>, <Mythread(Thread-11, started 22516)>, <Mythread(Thread-12, started 30032)>, <Mythread(Thread-13, started 22836)>, <Mythread(Thread-14, started 19340)>, <Mythread(Thread-15, started 27456)>, <Mythread(Thread-16, started 31292)>, <Mythread(Thread-17, started 26192)>, <Mythread(Thread-18, started 22444)>, <Mythread(Thread-19, started 25536)>, <Mythread(Thread-20, started 30204)>]
setprofile(func):為所有進程設置一個trace函數
setprofile(func):為所有線程設置一個profile函數
stack_size(size=0):返回新創建線程的棧大小,設定之後創建線程的棧大小
threading模塊