首頁 > 軟體

python 多執行緒threading程式詳情

2022-04-14 16:02:52

CPython implementation detail: 在 CPython 中,由於存在全域性直譯器鎖, 同一時刻只有一個執行緒可以執行 Python 程式碼(雖然某些效能導向的庫可能會去除此限制)。 如果你想讓你的應用更好地利用多核心計算機的計算資源,推薦你使用multiprocessing或concurrent.futures.ProcessPoolExecutor但是,如果你想要同時執行多個 I/O 密集型任務,則多執行緒仍然是一個合適的模型。

再來引入一個概念:

  • 並行(parallelism):   是同一時刻,每個執行緒都在執行。
  • 並行(concurrency):是同一時刻,只有一個執行緒執行,然後交替執行(再加上電腦執行速度快)。所以從一個宏觀的角度來看,似乎每個執行緒都在執行了。

可以知道python執行緒是並行的。

 關於執行緒Threading的方法(獲取執行緒的某種屬性)。

  • active_count():它會獲得,執行這個方法時,還存活的Thread()的物件數量。
  • enumerate():返回當前所有存活的Thread物件的列表。
  • current_thread():返回當前呼叫者 控制Thread()執行緒的物件。如果呼叫者控制的執行緒物件不是由threading建立,則會返回一個功能受限的虛擬執行緒物件。
  • get_ident():返回當前執行緒的“執行緒識別符號”。它是一個非零整數。
  • get_native_id():返回核心分配給當前執行緒的原生整合執行緒ID。這是一個非負整數。
  • main_thread():返回主執行緒(thread)物件,一般是python直譯器開始時建立的執行緒。

執行緒簡介:

 Thread類表示在單獨的控制執行緒中執行的活動。指定活動有兩種方法:將可呼叫物件傳遞給建構函式,或重寫子類中的run()方法。子類中不應重寫任何其他方法(建構函式除外)。換句話說,只重寫這個類的_init__;()和run()方法

一旦執行緒活動開始,該執行緒會被認為是 '存活的' 。當它的run()  方法終結了(不管是正常的還是丟擲未被處理的異常),就不是'存活的'。 

先看看該類的引數有哪些:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

  • group:官方的解釋是,為了日後擴充套件ThreadGroup類實現而保留。(唉,我也不太清楚的)
  • target:是要於多執行緒的函數
  • name:是執行緒的名字
  • args :函數的引數,型別是元組()
  • kwargs:函數的引數,型別是字典{}

為了便於理解,先舉一個小例子,為了方便理解,先簡單瞭解一下該類的一個方法(函數在類中被稱為方法):

  • start():開始執行緒活動
import threading
import time
 
# 列印函數a
def printa(a):
    count = 0
    while count < 5:
        time.sleep(2)
        print("執行緒:%s。列印:%s。時間:%s。" % (threading.current_thread().name, a, time.ctime()))
        count += 1
 
# 列印函數b
def printb(b):
    count = 0
    while count < 5:
        time.sleep(4)
        print("執行緒:%s。列印:%s。時間:%s。" % (threading.current_thread().name, b, time.ctime()))
        count += 1
 
# threading.Thread(target=,args=(),name='')
t1 = threading.Thread(target=printa, args=(10,), name='執行緒1')
t2 = threading.Thread(target=printb, args=(20,), name='執行緒2')
 
t1.start()
t2.start()
 
t1.join()
t2.join()
 
print("退出主執行緒")
import threading
import time
 
# 列印函數a
def printa(a):
    count = 0
    while count < 5:
        time.sleep(2)
        print("執行緒:%s。列印:%s。時間:%s。" % (threading.current_thread().name, a, time.ctime()))
        count += 1
 
# threading.Thread(target=,args=(),name='')
threadList = []
for i in range(3):
    t = threading.Thread(target=printa, args=(i,))
    threadList.append(t)
 
for t in threadList:
    t.start()
 
for t in threadList:
    t.join()
    
print("退出主執行緒")

到此這篇關於python 多執行緒threading程式詳情的文章就介紹到這了,更多相關python 多執行緒threading內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com