目錄
- 一.Python 執行緒信號量 semaphore 簡介
- 二.Python 執行緒信號量 semaphore 原理
- 三.Python 執行緒信號量 semaphore 函式介紹
- 四.Python 執行緒信號量 semaphore 使用
- 五.猜你喜歡
零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門
一.Python 執行緒信號量 semaphore 簡介
通過前面對 執行緒互斥鎖 lock / 執行緒事件 event / 執行緒條件變數 condition / 執行緒定時器 timer 的講解,相信你對執行緒 threading 模塊已經有了一定的了解,同時執行多個執行緒的確可以提高程式的效率,但是并非執行緒的數量越多越好,可能對于計算機而言,你直接運行 20 ~ 30 執行緒可能沒太大影響,如果同時運行上千個甚至上萬個呢?我相信你電腦會直接癱瘓……
二.Python 執行緒信號量 semaphore 原理
多執行緒同時運行,能提高程式的運行效率,但是并非執行緒越多越好,而 semaphore 信號量可以通過內置計數器來控制同時運行執行緒的數量,啟動執行緒(消耗信號量)內置計數器會自動減一,執行緒結束(釋放信號量)內置計數器會自動加一;內置計數器為零,啟動執行緒會阻塞,直到有本執行緒結束或者其他執行緒結束為止;
三.Python 執行緒信號量 semaphore 函式介紹
- **acquire **— 消耗信號量,內置計數器減一;
- **release **— 釋放信號量,內置計數器加一;
在 semaphore 信號量有一個內置計數器,控制執行緒的數量,acquire 會消耗信號量,計數器會自動減一;release 會釋放信號量,計數器會自動加一;當計數器為零時,acquire 呼叫被阻塞,直到 release 釋放信號量為止,
四.Python 執行緒信號量 semaphore 使用
創建多個執行緒,限制同一時間最多運行 5 個執行緒,示例代碼如下:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python 執行緒信號量 semaphore.py
@Time:2021/05/04 07:37
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
# 匯入執行緒模塊
import threading
# 匯入時間模塊
import time
# 添加一個計數器,最大并發執行緒數量5(最多同時運行5個執行緒)
semaphore = threading.Semaphore(5)
def foo():
semaphore.acquire() #計數器獲得鎖
time.sleep(2) #程式休眠2秒
print("當前時間:",time.ctime()) # 列印當前系統時間
semaphore.release() #計數器釋放鎖
if __name__ == "__main__":
thread_list= list()
for i in range(20):
t=threading.Thread(target=foo,args=()) #創建執行緒
thread_list.append(t)
t.start() #啟動執行緒
for t in thread_list:
t.join()
print("程式結束!")
'''
輸出結果:
當前時間: Tue May 4 12:01:43 2021
當前時間: Tue May 4 12:01:43 2021
當前時間: Tue May 4 12:01:43 2021
當前時間: Tue May 4 12:01:43 2021
當前時間: Tue May 4 12:01:43 2021
當前時間: Tue May 4 12:01:45 2021
當前時間: Tue May 4 12:01:45 2021
當前時間: Tue May 4 12:01:45 2021
當前時間: Tue May 4 12:01:45 2021
當前時間: Tue May 4 12:01:45 2021
當前時間: Tue May 4 12:01:47 2021
當前時間: Tue May 4 12:01:47 2021
當前時間: Tue May 4 12:01:47 2021
當前時間: Tue May 4 12:01:47 2021
當前時間: Tue May 4 12:01:47 2021
當前時間: Tue May 4 12:01:49 2021
當前時間: Tue May 4 12:01:49 2021
當前時間: Tue May 4 12:01:49 2021
當前時間: Tue May 4 12:01:49 2021
當前時間: Tue May 4 12:01:49 2021
程式結束!
Process finished with exit code 0
'''
根據列印的日志可以看出,同一時間只有 5 個執行緒運行,間隔兩秒之后,再次啟動 5 個執行緒,直到 20 個執行緒全部運行結束為止;如果沒有設定信號量 Semapaore ,創建執行緒直接 start ,輸出的時間全部都是一樣的,這個問題比較簡單,可以自己去實驗一下!
五.猜你喜歡
- Python 條件推導式
- Python 串列推導式
- Python 字典推導式
- Python 函式宣告和呼叫
- Python 不定長引數 *argc/**kargcs
- Python 匿名函式 lambda
- Python return 邏輯判斷運算式
- Python 字串/串列/元組/字典之間的相互轉換
- Python 區域變數和全域變數
- Python type 函式和 isinstance 函式區別
- Python is 和 == 區別
- Python 可變資料型別和不可變資料型別
- Python 淺拷貝和深拷貝
- Python 檔案讀寫操作
- Python 例外處理
- Python 模塊 import
- Python __name__ == ‘__main__’詳細解釋
未經允許不得轉載:猿說編程 ? Python 執行緒信號量 semaphore
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/288431.html
標籤:Python
上一篇:Python pip配置國內源
