日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python?多線程threading程序詳情_python

作者:WX_LW ? 更新時間: 2022-06-14 編程語言

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("退出主線程")

原文鏈接:https://blog.csdn.net/weixin_58619062/article/details/124116159

欄目分類
最近更新