Python3 多線程的使用
阿新 • • 發佈:2019-03-14
html eve thread線程 htm 發生 return lock 來講 threading
多線程
- 多線程使用的是thread庫,多進程使用的是multiprocessing庫,建議不要使用多線程進行爬蟲。
- 在Python多線程下,每個線程的執行方式:
- 獲取GIL(Global Interpreter Lock(全局解釋器鎖))
- 執行代碼直到sleep或者是Python虛擬機將其掛起
- 釋放GIL
註釋:
1.GIL的全稱是Global Interpreter Lock(全局解釋器鎖),來源是python設計之初的考慮,為了數據安全所做的決定。
2.每個CPU在同一時間只能執行一個線程(在單核CPU下的多線程其實都只是並發,不是並行,並發和並行從宏觀上來講都是同時處理多路請求的概念。但並發和並行又有區別,並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔內發生。)
多線程的使用方法
使用Theading模塊創建線程
文檔地址:https://docs.python.org/3/library/threading.html
1.直接實例化threading.Thread線程對象,實現多線程
實例
import threading import time def print_age(who, age): """ 需要用多線程調用的函數 :param who: :param age: :return: """ print("Hello,every one!") time.sleep(1) print("%s is %s years old !" % (who, age)) if __name__ == "__main__": t1 = threading.Thread(target=print_age, args=("jet", 18, )) # 創建線程1 t2 = threading.Thread(target=print_age, args=("jack", 25, )) # 創建線程2 t3 = threading.Thread(target=print_age, args=("jack", 25,)) # 創建線程3 t1.start() # 運行線程1 t2.start() # 運行線程2 t3.start() # 運行線程3 print("over...")
2.通過繼承threading.Thread,並重寫run()方法,來實現多線程
import threading import time class MyThread(threading.Thread): """ 使用繼承的方式實現多線程 """ def __init__(self, who): super().__init__() # 必須調用父類的構造方法 self.name = who def run(self): print("%s is run..." % self.name) time.sleep(3) if __name__ == "__main__": t1 = MyThread("Jet") # 創建線程1 t2 = MyThread("Jack") # 創建線程2 t1.start() # 運行線程1 t2.start() # 運行線程2 print("over...")
Python3 多線程的使用