1. 程式人生 > >Python3 多線程的使用

Python3 多線程的使用

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 多線程的使用