鎖機制:
l=lock()
一把鎖配一把鑰匙
拿鑰匙,鎖門 l.acquire()
換鑰匙,開門l.release()
from multiprocessing import process,lockimport time
def check(i):
with open('1')as f:
c=f.read()
print('%s查到還剩%s張余票'%(i,c))
def buy(i,l):
l.acquire()
with open('1')as f:
c = int(f.read())
time.sleep(0.1)
if c>0:
print('\033[31m %s買到了一張票\033[0m'%i)
time.sleep(0.1)
c-=1
else:
print('\033[32m 尊敬的%s,餘票已不足,請查詢其他車次 \033[0m'%i)
with open('1','w')as f:
f.write(str(c))
time.sleep(0.1)
l.release()
if __name__ == '__main__':
l=lock()
lst_name=['張三','李文達','達文西','alex','wisir','coco','jack','tony']
lis=
liss=
for i in lst_name:
p=process(target=check,args=(i,))
p.start()
for i in lst_name:
p1=process(target=buy,args=(i,l))
p1.start()
[ss.join() for ss in lis]
[ss.join() for ss in liss]
訊號機制:
sem=semaphore(n)
n:是指初始化一把鎖配幾把鑰匙,乙個int型
拿鑰匙,鎖門 sem.acquire()
還鑰匙,開門 sem.release()
訊號量機制比鎖機制多了乙個計數器,這個計數器是用來記錄當前剩餘幾把鑰匙的
當計數器為0時,表示沒有鑰匙了,此時的acquire()處於阻塞
對於計數器來說,每acquire一次,計數器內部就減一,release一次,計數器就加一
from multiprocessing import process,semaphoreimport time
import random
def spa(sam,i):
sam.acquire()
print('第%s顧客進去了'%(i+1))
time.sleep(random.randint(3,5))
print('第%s顧客出來了' % (i + 1))
sam.release()
if __name__ == '__main__':
sam=semaphore(5)
for i in range(20):
p=process(target=spa,args=(sam,i))
p.start()
事件機制
e=event()
e.set()#將is_set()設為true
e.clear() # 將is_set()設為false
e.wait()#判斷is_set的bool值,如果bool為true,則非阻塞,bool值為false,則阻塞
e.is_set()
# 事件是通過is_set()的bool值,去標識e.wait() 的阻塞狀態
# 當is_set()的bool值為false時,e.wait()是阻塞狀態
# 當is_set()的bool值為true時,e.wait()是非阻塞狀態
# 當使用set()時,是把is_set的bool變為true
# 當使用clear()時,是把is_set的bool變為false
from multiprocessing import process,eventimport time
def traffic(e):
e.set()
while 1:
if e.is_set():
print('\033[32m 綠燈亮 \033[0m ')
time.sleep(5)
# print('\033[31m 紅燈亮 \033[0m ')
e.clear()
else:
print('\033[31m 紅燈亮 \033[0m ')
time.sleep(5)
# print('\033[32m 綠燈亮 \033[0m ')
e.set()
def car(i,e):
e.wait()
print('第%s輛車過去了'%(i+1))
time.sleep(1)
if __name__ == '__main__':
e=event()
t=process(target=traffic,args=(e,))
t.start()
for i in range(40):
print(i)
c=process(target=car,args=(i,e))
c.start()
c.join()
t.terminate()
鎖,訊號量,事件機制
鎖 from multiprocessing import lock l lock l.acquire 拿走鑰匙,鎖門,不讓其他人進屋 l.release 釋放鎖。還鑰匙,開門,允許其他人進屋 執行乙個程序的時候不允許其他程序一起執行 舉例 兩個人在銀行共同存錢取錢 from multiproces...
訊號量 事件 鎖 守護程序
什麼是程序?程序是計算機中最小的資源分配單位 程序與程序之間資料隔離,執行過程非同步 為什麼會出現程序的概念?合理利用cpu 提高使用者體驗 多個程序是可以同時利用多個cpu的,可以實現並行的效果 在主程序中控制子程序的方法?子程序物件 process target,args 在建立的這一刻根本就沒...
訊號量機制
1 訊號量的型別定義 訊號量 semaphore 的資料結構為乙個值和乙個 指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量 當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改變。一般來說,訊...