from multiprocessing import process,lock
import os,time,json
with open('user', 'w', encoding='utf-8')as f:
dic=
json.dump(dic,f)
def search():
with open('user','r',encoding='utf-8')as f:
data=json.load(f)
print(data.get('count'))
def get():
with open('user','r',encoding='utf-8')as f:
data = json.load(f)
if data['count'] > 0:
data['count'] -= 1
with open('user','w',encoding='utf-8')as f:
json.dump(data,f)
print('success')
time.sleep(1)
else:
print('票已售空')
def piao(lock):
search()
lock.acquire()
get()
lock.release()
ifname== 'main':
lock=lock()
for i in range(5):
p=process(target=piao,args=(lock,))
p.start()佇列1
from multiprocessing import queue,process
q=queue()
q.put(1)
print(q)
data=q.get()
print(data)
data=q.get()
print(data) #缺省會一直等待拿值
q.put(5)
2from multiprocessing import queue,process
q=queue(4)
q.put(1)
q.put(5)
q.put(5)
q.put(5)
q.put(5) #此處佇列滿了,就會成阻塞狀態
q.get()
q.get()
3from multiprocessing import queue,process
q=queue(4)
q.put(1)
q.put(5)
q.put(5)
q.put(5)
q.put(5,block=true,timeout=3) #此處佇列滿了,就會成阻塞狀態,block為等待狀態,timeout為等待時間,等不到就報錯
q.get()
q.get()
4from multiprocessing import queue,process
q=queue(4)
q.put(1)
q.get()
q.get(block=true,timeout=3) #佇列已被取空,此時再取就會阻塞,block為阻塞狀態,timeout為阻塞時間
5from multiprocessing import queue,process
q=queue(1)
q.put(1)
q.put_nowait(5) #佇列已滿,此時再存就會阻塞,相當於put的預設block為false
生產者消費者模型
版本一from multiprocessing import queue,process
import time
def produce(q,name,msg):
for i in range(3):
q.put(msg+str(i))
print(f'生產了')
time.sleep(1)
q.put(none) #用none來終止消費者
def cost(q,name):
while true:
msg=q.get()
if msg==none:
break
print(f'吃了')
time.sleep(1)
ifname== 'main':
q=queue()
p1=process(target=produce,args=(q,'wind','card'))
p2=process(target=produce,args=(q,'nick','niunai'))
# p1=process(target=process,args=(q,'wind','card'))
c1=process(target=cost,args=(q,'chanyuli'))
c2=process(target=cost,args=(q,'zhongshifu'))
p1.start()
p2.start()
c1.start()
c2.start()
版本二from multiprocessing import queue,process,joinablequeue
import time
def produce(q,name,msg):
for i in range(3):
q.put(msg+str(i))
print(f'生產了')
time.sleep(1)
def cost(q,name):
while true:
msg=q.get()
q.task_done()
if msg==none:
break
print(f'吃了')
time.sleep(1)
ifname== 'main':
q=joinablequeue()
p1=process(target=produce,args=(q,'wind','card'))
p2=process(target=produce,args=(q,'nick','niunai'))
# p1=process(target=process,args=(q,'wind','card'))
c1=process(target=cost,args=(q,'chanyuli'))
c2=process(target=cost,args=(q,'zhongshifu'))
c1.daemon=true
c2.daemon=true
p1.start()
p2.start()
c1.start()
c2.start()
p1.join()
p2.join()
q.join()
好文要頂
python佇列 生產者消費者模型
生產者消費者模型 在軟體開發的過程中,經常碰到這樣的場景 某些模組負責生產資料,這些資料由其他模組來負責處理 此處的模組可能是 函式 執行緒 程序等 產生資料的模組稱為生產者,而處理資料的模組稱為消費者。在生產者與消費者之間的緩衝區稱之為倉庫。生產者負責往倉庫運輸商品,而消費者負責從倉庫裡取出商品,...
佇列和生產者消費者模型
ipc機制 程序通訊 管道 pipe,基於共享的記憶體空間 佇列 pipe 鎖 from multiprocessing import queue q queue q.put 3 放值 q.get 拿值佇列不適合傳大檔案,通常傳一些訊息 生產者 生產資料的任務 消費者 處理資料的任務 生產者 佇列 ...
生產者消費者模型
1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...