基於佇列實現生產者消費者(Python)

2022-04-10 20:58:01 字數 2278 閱讀 4984

#

進城之間資料隔離

#程序之間通訊(ipc) inter process communication

#基於檔案 :同一臺機器上的多個程序之間通訊

#queue 佇列

#基於socket的檔案級別的通訊來完成資料傳遞的

#基於網路 :同一臺機器或者多台機器上的多程序間通訊

#第三方工具(訊息中介軟體)

#memcache

#redis

#rabbitmq

#kafka

#from multiprocessing import queue,process

#def pro(q):

#for i in range(10):

#print(q.get())

#def son(q):

#for i in range(10):

#q.put('hello%s'%i)##

if __name__ == '__main__':

#q = queue()

#p = process(target=son,args=(q,))

#p.start()

#p = process(target=pro, args=(q,))

#p.start()

#生產者消費者模型

#爬蟲的時候

#分布式操作 : celery

#本質 :就是讓生產資料和消費資料的效率達到平衡並且最大化的效率

#import time

#import random

#from multiprocessing import queue,process##

def consumer(q): # 消費者:通常取到資料之後還要進行某些操作

#for i in range(10):

#print(q.get())##

def producer(q): # 生產者:通常在放資料之前需要先通過某些**來獲取資料

#for i in range(10):

#time.sleep(random.random())

#q.put(i)##

if __name__ == '__main__':

#q = queue()

#c1 = process(target=consumer,args=(q,))

#p1 = process(target=producer,args=(q,))

#c1.start()

#p1.start()

import

time

import

random

from multiprocessing import

queue,process

def consumer(q,name): #

消費者:通常取到資料之後還要進行某些操作

while

true:

food =q.get()

iffood:

print('

%s吃了%s

'%(name,food))

else:break

def producer(q,name,food): #

生產者:通常在放資料之前需要先通過某些**來獲取資料

for i in range(10):

foodi = '

%s%s

'%(food,i)

print('

%s生產了%s

'%(name,foodi))

time.sleep(random.random())

q.put(foodi)

if__name__ == '

__main__':

q =queue()

c1 = process(target=consumer,args=(q,'

alex'))

c2 = process(target=consumer,args=(q,'

alex'))

p1 = process(target=producer,args=(q,'

大壯','泔水'

)) p2 = process(target=producer,args=(q,'

b哥','香蕉'

)) c1.start()

c2.start()

p1.start()

p2.start()

p1.join()

p2.join()

q.put(none)

q.put(none)

基於佇列實現生產者消費者模型

code from multiprocessing import process,queue import time,random,os def consumer q,p1 while true res q.get if res finish break time.sleep random.rand...

C 實現生產者消費者佇列

結果分析 原始碼位址 首先,我們的生產者與消費者佇列需要滿足同步與互斥關係,就需要一把互斥鎖,以及生產者與消費者各自的條件變數。其次,我們可以利用c 中stl裡的queue佇列來進行實現,但是我們需要對push,pop進行修改,因為stl庫的函式不一定能滿足互斥條件。也就是不一定安全。最後,所有資源...

佇列,生產者消費者模型

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 enco...