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


前言

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自動化交流 QQ群:779429633


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM