1. 程式人生 > >python筆記7-多線程threading之函數式

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

開始 tran 個數字 get meta 兩種 吃火鍋 keyword 多線程

前言

1.python環境2.7
2.threading模塊系統自帶

單線程

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

# coding:utf-8
import time
def 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-8
import threading
import time

def 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-8
import threading
import time

def 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之函數式