佇列,生產者消費者模型

2022-09-15 08:27:11 字數 3556 閱讀 1561

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.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...