1. 程式人生 > >threading模塊

threading模塊

range 設定 reading 接受 trac 註意 創建 idt 多線程

多線程和多進程都可以很容易的實現並發,協程通過切換上下文來充分利用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,time

class 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模塊