91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python使用多線程的方法

發布時間:2020-08-14 11:21:35 來源:億速云 閱讀:139 作者:小新 欄目:編程語言

這篇文章主要介紹了python使用多線程的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

多線程(英語:multithreading),是指從軟件或者硬件上實現多個線程并發執行的技術。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程(臺灣譯作“執行緒”),進而提升整體處理性能。

Python 多線程之使用方法

Python 提供多線程編程的模塊有以下幾個:

- _thread

- threading

- Queue

- multiprocessing

下面一一介紹:

1. _thread 模塊提供了低級別的基本功能來支持多線程功能,提供簡單的鎖來確保同步,推薦使用 threading 模塊。

2. threading 模塊對 _thread 進行了封裝,提供了更高級別,功能更強,更易于使用的線程管理的功能,對線程的支持更為完善,絕大多數情況下,只需要使用 threading 這個高級模塊就夠了。

使用 threading 進行多線程操作:

方法一:是創建 threading.Thread 實例,調用其 start() 方法。

import time
import threading
def task_thread(counter):
    print(f'線程名稱:{threading.current_thread().name} 參數:{counter} 開始時間:{time.strftime("%Y-%m-%d 
    %H:%M:%S")}')
    num = counter
    while num:
        time.sleep(3)
        num -= 1
    print(f'線程名稱:{threading.current_thread().name} 參數:{counter} 結束時間:{time.strftime("%Y-%m-%d 
    %H:%M:%S")}')
if __name__ == '__main__':
    print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
    #初始化3個線程,傳遞不同的參數
    t1 = threading.Thread(target=task_thread, args=(3,))
    t2 = threading.Thread(target=task_thread, args=(2,))
    t3 = threading.Thread(target=task_thread, args=(1,))
    #開啟三個線程
    t1.start()
    t2.start()
    t3.start()
    #等待運行結束
    t1.join()
    t2.join()
    t3.join()
    print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')

運行結果如下所示:

主線程開始時間:2018-07-06 23:03:46
線程名稱:Thread-1 參數:3 開始時間:2018-07-06 23:03:46
線程名稱:Thread-2 參數:2 開始時間:2018-07-06 23:03:46
線程名稱:Thread-3 參數:1 開始時間:2018-07-06 23:03:46
線程名稱:Thread-3 參數:1 結束時間:2018-07-06 23:03:49
線程名稱:Thread-2 參數:2 結束時間:2018-07-06 23:03:52
線程名稱:Thread-1 參數:3 結束時間:2018-07-06 23:03:55
主線程結束時間:2018-07-06 23:03:55

方法二:繼承 Thread 類,在子類中重寫 run() 和 init() 方法。

import time
import threading
class MyThread(threading.Thread):
    def __init__(self, counter):
        super().__init__()
        self.counter = counter
    def run(self):
        print(
            f'線程名稱:{threading.current_thread().name} 參數:{self.counter} 開始時間:{time.strftime
            ("%Y-%m-%d %H:%M:%S")}'
        )
        counter = self.counter
        while counter:
            time.sleep(3)
            counter -= 1
        print(
            f'線程名稱:{threading.current_thread().name} 參數:{self.counter} 結束時間:{time.strftime
            ("%Y-%m-%d %H:%M:%S")}'
        )
if __name__ == "__main__":
    print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
    # 初始化3個線程,傳遞不同的參數
    t1 = MyThread(3)
    t2 = MyThread(2)
    t3 = MyThread(1)
    # 開啟三個線程
    t1.start()
    t2.start()
    t3.start()
    # 等待運行結束
    t1.join()
    t2.join()
    t3.join()
    print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')

運行結果如下,與方法一的運行結果一致。

主線程開始時間:2018-07-06 23:34:16
線程名稱:Thread-1 參數:3 開始時間:2018-07-06 23:34:16
線程名稱:Thread-2 參數:2 開始時間:2018-07-06 23:34:16
線程名稱:Thread-3 參數:1 開始時間:2018-07-06 23:34:16
線程名稱:Thread-3 參數:1 結束時間:2018-07-06 23:34:19
線程名稱:Thread-2 參數:2 結束時間:2018-07-06 23:34:22
線程名稱:Thread-1 參數:3 結束時間:2018-07-06 23:34:25
主線程結束時間:2018-07-06 23:34:25

如果繼承 Thread 類,想調用外部傳入函數,代碼如下所示:

import time
import threading
def task_thread(counter):
      print(f'線程名稱:{threading.current_thread().name} 參數:{counter} 開始時間:{time.strftime("%Y-%m-%d 
      %H:%M:%S")}')
    num = counter
    while num:
        time.sleep(3)
        num -= 1
    print(f'線程名稱:{threading.current_thread().name} 參數:{counter} 結束時間:{time.strftime("%Y-%m-%d 
    %H:%M:%S")}')
class MyThread(threading.Thread):
    def __init__(self, target, args):
        super().__init__()
        self.target = target
        self.args = args
    def run(self):
        self.target(*self.args)
if __name__ == "__main__":
    print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
    # 初始化3個線程,傳遞不同的參數
    t1 = MyThread(target=task_thread,args=(3,))
    t2 = MyThread(target=task_thread,args=(2,))
    t3 = MyThread(target=task_thread,args=(1,))
    # 開啟三個線程
    t1.start()
    t2.start()
    t3.start()
    # 等待運行結束
    t1.join()
    t2.join()
    t3.join()
    print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')

這樣就和方法一是相通的,實例化自定義的線程類,運行結果不變。

感謝你能夠認真閱讀完這篇文章,希望小編分享python使用多線程的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天峨县| 双鸭山市| 平邑县| 固安县| 正镶白旗| 吐鲁番市| 左贡县| 五华县| 乌兰察布市| 云梦县| 阿拉善盟| 盘锦市| 凤翔县| 册亨县| 田东县| 明溪县| 新晃| 垦利县| 西平县| 航空| 浠水县| 斗六市| 汾阳市| 随州市| 延安市| 白河县| 石渠县| 简阳市| 年辖:市辖区| 嘉善县| 舞钢市| 雅安市| 巨野县| 棋牌| 万源市| 阳新县| 兴和县| 榕江县| 富阳市| 长顺县| 盘锦市|