python 43 程序鎖 訊號量 事件

2021-10-09 13:02:37 字數 3135 閱讀 8095

鎖:lock,多個程序中同一時間,只能排序執行程式。(一把鑰匙只能進入乙個,歸還鑰匙後面的拿鑰匙進入乙個,類推)

訊號:semaphore,多個程序中同一時間,同時被n個程序執行。

事件:event,通過乙個訊號控制多個程序,同時執行或阻塞。

1、程序鎖,比如搶票會有多個使用者一起搶。

沒有鎖程序的情況下:發現餘票只有一張,但每個程序都能搶到票了,實際也就只有一張改怎麼辦?

2、運用程序鎖:lock

這樣就可以解決類似這樣的問題。

from multiprocessing import process,lock

import time,json

def find():

with open(r'test.py')as f:

d = json.load(f)

print('剩餘免費門票:%s'%d['count'])

def buy(i,lock):

lock.acquire() # 拿鑰匙

with open(r'test.py')as f:

d = json.load(f)

if d['count']<=0:print('門票已被搶完~')

else:

print('恭喜使用者 %s 成功搶到門票了'%i)

if d['count']!=0:d['count']-=1

time.sleep(0.2)

with open(r'test.py','w')as f:

json.dump(d,f)

lock.release() # 還鑰匙

if __name__ == '__main__':

for i in range(1): # 5個程序同時查詢

1、訊號量-semaphore:比如乙個程式最多2個進入。

基本原理類似鎖中的執行,鎖是單個進入,在鎖的基礎上使用了乙個內建的計數器,從而達到多個同時進入。

可以任意設定同時最多進入多少個。

# 1、訊號量-semaphore:比如乙個程式最多2個進入

from multiprocessing import process,semaphore

import time

def func(i,sem):

sem.acquire()

print('使用者 %s 進入了'%i)

time.sleep(5)

print('使用者 %s 退出了'%i)

sem.release()

if __name__ == '__main__':

sem=semaphore(2) # 設定能執行n個同時執行

1、event:通過乙個訊號控制多個程序,同時執行或阻塞。

from multiprocessing import event

e=event()

e.is_set() # 建立乙個事件,預設為阻塞狀態:false

print('阻塞前~')

# e.set() # 將事件堵塞狀態設為:true

e.wait() # 如果is_set()的值為false,那麼進行堵塞,否則不堵塞

e.clear() # 將事件的堵塞狀態清空,即為預設狀態:false

print('阻塞後~~~')

將事件堵塞狀態設為:true

將事件堵塞狀態設為:false

2、事件例項:紅綠燈事件

from multiprocessing import process,event

import time

def func(e):

while 1:

if e.is_set():

e.clear()

print('紅燈停~~')

else:

e.set()

print('綠燈亮起~')

time.sleep(3)

def car(i,e):

if not e.is_set():

print('%s 等紅燈中==' % i)

e.wait()

print('%s 通行中-->' % i)

python 程序訊號量

1 概念 訊號量和鎖相似,鎖同一時間只允許乙個物件 程序 通過,訊號量同一時間允許多個物件 程序 通過 2 應用場景 多執行緒,並規定數量 3 格式 匯入訊號量模組 例項化訊號量物件,可以規定訊號量的個數 傳遞物件 拿到一把鑰匙 釋放一把鑰匙 4 過程 獲得鑰匙,當鑰匙串沒鑰匙時,其它程序要在外面等...

訊號量 事件 鎖 守護程序

什麼是程序?程序是計算機中最小的資源分配單位 程序與程序之間資料隔離,執行過程非同步 為什麼會出現程序的概念?合理利用cpu 提高使用者體驗 多個程序是可以同時利用多個cpu的,可以實現並行的效果 在主程序中控制子程序的方法?子程序物件 process target,args 在建立的這一刻根本就沒...

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...