1. 程式人生 > 其它 >當前時間_理解Python多執行緒:執行緒輪詢得到CPU時間片的演示例子第二篇

當前時間_理解Python多執行緒:執行緒輪詢得到CPU時間片的演示例子第二篇

技術標籤:當前時間

Python多執行緒上一篇參考:理解Python多執行緒:通過易懂的小例子展開「第一篇」

要想深刻理解多執行緒,必須首先建立一個概念:執行程式碼的CPU資源,被作業系統輪詢分配算力。

為了更好解釋,假定計算機是單核的,儘管對於cpython,這個假定有些多餘。

我們在當前程序中,開闢3個執行緒,裝到threads中:

import time
from datetime import datetime
import threading


def print_time():
for _ in range(5): # 在每個執行緒中列印5次
time.sleep(0.1) # 模擬列印前的相關處理邏輯
print('當前執行緒%s,列印結束時間為:%s'%(threading.current_thread().getName(),datetime.today()))


threads = [threading.Thread(name='t%d'%(i,),target=print_time) for i in range(3)]

啟動3個執行緒:

[t.start() for t in threads]

列印結果如下,t0,t1,t2三個執行緒。

根據作業系統的排程演算法,輪詢獲得CPU時間片,注意觀察,t2執行緒可能被連續排程,從而獲得時間片。

當前執行緒t0,列印結束時間為:2020-01-12 02:27:15.705235
當前執行緒t1,列印結束時間為:2020-01-12 02:27:15.705402
當前執行緒t2,列印結束時間為:2020-01-12 02:27:15.705687
當前執行緒t0,列印結束時間為:2020-01-12 02:27:15.805767
當前執行緒t1,列印結束時間為:2020-01-12 02:27:15.805886
當前執行緒t2,列印結束時間為:2020-01-12 02:27:15.806044
當前執行緒t0,列印結束時間為:2020-01-12 02:27:15.906200
當前執行緒t2,列印結束時間為:2020-01-12 02:27:15.906320
當前執行緒t1,列印結束時間為:2020-01-12 02:27:15.906433
當前執行緒t0,列印結束時間為:2020-01-12 02:27:16.006581
當前執行緒t1,列印結束時間為:2020-01-12 02:27:16.006766
當前執行緒t2,列印結束時間為:2020-01-12 02:27:16.007006
當前執行緒t2,列印結束時間為:2020-01-12 02:27:16.107564
當前執行緒t0,列印結束時間為:2020-01-12 02:27:16.107290
當前執行緒t1,列印結束時間為:2020-01-12 02:27:16.107741

通過今天的小例子,你要建立多執行緒中的一個核心概念:程序中的多個執行緒會被CPU輪詢爭取到計算資源,每次分配給這個執行緒一定的計算時間,時間耗盡中斷此執行緒執行,然後再分配給其他執行緒一定時間,以此輪詢......


輕觸這裡,給我留言


近期小例子:閏年判斷&字元型時間互轉;列印2020年日曆;裝飾器的最通俗理解,不容錯過!;pyecharts繪製詞雲圖;使用pillow處理圖片,很簡單!;slice物件的應用舉例;一行程式碼優化異常輸出;函式的五類引數使用例子;繪製時間線輪播圖;python引數型別使用總結;繪製水球圖;lambda引數之坑;Python繪製儀表盤;引數的預設值陷阱!;chain串聯多個迭代物件;機器學習中會涉及到的隨機選擇樣本;使用namedtuple的小例子;pkuseg 做分詞,超級nice~;寫一個裝飾器:統計異常發生次數和時間;物件可被呼叫的實現方法;求任意維度兩點間距離;兩種合併字典的方法對比;計算和聚合同時進行;groupby 分組;plotly畫柱狀圖+折線圖;

有收穫,點個在看5f615432284437b82c790caf6137e1a6.png