python筆記7-多線程threading之函數式

來源:互聯網
上載者:User

標籤:添加   odi   cti   定義   筆記   封裝   案例   多線程   target   

前言

1.python環境2.7
2.threading模組系統內建

單線程

1.平常寫的代碼都是按順序挨個執行的,就好比吃火鍋和哼小曲這兩個行為事件,定義成兩個函數,執行的時候,是先吃火鍋再哼小曲,這種就是單線程的行為。

# coding:utf-8import timedef chi():    print("%s 吃火鍋開始:" % time.ctime())    time.sleep(1)    print("%s 吃火鍋結束--" % time.ctime())def heng():    print("%s 哼著小曲開始:" % time.ctime())    time.sleep(1)    print("%s 哼著小曲結束--" % time.ctime())if __name__ == "__main__":    chi()    heng()Thu Jan 11 16:32:37 2018 吃火鍋開始:Thu Jan 11 16:32:38 2018 吃火鍋結束--Thu Jan 11 16:32:38 2018 哼著小曲開始:Thu Jan 11 16:32:39 2018 哼著小曲結束--

 

2.生活中我們是可以一邊吃火鍋一邊哼小曲的,那麼代碼裡面如何?這種同時進行的不同事件呢?這就是接下來要講的python多線程

多線程threading

1.Python通過兩個標準庫thread和threading提供對線程的支援。thread提供了低層級的、原始的線程以及一個簡單的鎖.Threading模組封裝了一些常用的方法,初學者直接學這個模組就行了。

2.Python中使用線程有兩種方式:函數或者用類來封裝線程對象

3.threading.Thread裡面幾個參數介紹:

class Thread(_Verbose)      __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None)              *group*:group參數必須為空白,參數group是預留的,用於將來擴充;   參數args和kwargs分別表示調用target時的參數列表和關鍵字參數。              *target*: 參數target是一個可調用對象(也稱為活動[activity]),線上程啟動後執行              *name*: 參數name是線程的名字。預設值為“Thread-N“,N是一個數字。             *args*:傳遞給線程函數target的參數,他必須是個tuple類型.              *kwargs*:kwargs表示關鍵字參數。字典類型 {}.   
函數式

1.先看個簡單案例,這種是執行函數,函數不帶參數的

# coding:utf-8import threadingimport timedef chi():    print("%s 吃著火鍋開始:" % time.ctime())    time.sleep(1)    print("%s 吃著火鍋:涮羊肉" % time.ctime())    time.sleep(1)    print("%s 吃著火鍋:涮牛肉" % time.ctime())    time.sleep(1)    print("%s 吃著火鍋:貢丸" % time.ctime())    time.sleep(1)    print("%s 吃火鍋結束!" % time.ctime())def ting():    print("%s 哼著小曲1!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲2!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲3!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲4!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲5!" % time.ctime())    time.sleep(2)# 建立線程數組threads = []# 建立線程t1,並添加到線程數組t1 = threading.Thread(target=chi)threads.append(t1)# 建立線程t2,並添加到線程數組t2 = threading.Thread(target=ting)threads.append(t2)if __name__ == ‘__main__‘:    # 啟動線程    for t in threads:        t.start()

 

運行結果:
Thu Jan 11 16:35:50 2018 吃著火鍋開始:
Thu Jan 11 16:35:50 2018 哼著小曲1!
Thu Jan 11 16:35:51 2018 吃著火鍋:涮羊肉
Thu Jan 11 16:35:52 2018 哼著小曲2!Thu Jan 11 16:35:52 2018 吃著火鍋:涮牛肉

Thu Jan 11 16:35:53 2018 吃著火鍋:貢丸
Thu Jan 11 16:35:54 2018 哼著小曲3!Thu Jan 11 16:35:54 2018 吃火鍋結束!

Thu Jan 11 16:35:56 2018 哼著小曲4!
Thu Jan 11 16:35:58 2018 哼著小曲5!

2.帶參數的用args傳元群組類型(參數最後多加一個逗號“,”要不然會報錯)

# coding:utf-8import threadingimport timedef chi(threadName,name):    print("%s 吃著%s開始:" % (time.ctime(),threadName))    print("%s 吃著火鍋:涮羊肉" % time.ctime())    time.sleep(1)    time.sleep(1)    print("%s 吃著火鍋:涮牛肉" % time.ctime())    time.sleep(1)    print("%s 吃著火鍋:貢丸" % time.ctime())    time.sleep(1)    print("%s 吃著%s結束--" % (time.ctime(),threadName))    print("%s 運行結束!"%name)def ting(threadName):    print("%s 哼著%s1!" % (time.ctime(),threadName))    time.sleep(2)    print("%s 哼著小曲2!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲3!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲4!" % time.ctime())    time.sleep(2)    print("%s 哼著小曲5!" % time.ctime())    time.sleep(2)# 建立線程數組threads = []# 建立線程t1,並添加到線程數組# t1 = threading.Thread(target=chi, args=("火鍋","吃火鍋",))# 傳kwargs參數t1 = threading.Thread(target=chi, kwargs={"threadName":"火鍋","name":"吃火鍋"})threads.append(t1)# 建立線程t2,並添加到線程數組t2 = threading.Thread(target=ting,args=("小曲",))threads.append(t2)if __name__ == ‘__main__‘:    # 啟動線程    for t in threads:        t.start()

 

3.或者用kwargs傳字典{}類型

# 建立線程t1,並添加到線程數組# t1 = threading.Thread(target=chi, args=("火鍋","吃火鍋",))# 傳kwargs參數t1 = threading.Thread(target=chi, kwargs={"threadName":"火鍋","name":"吃火鍋"})

封裝類和方法的調用下篇介紹

python筆記7-多線程threading之函數式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.