码迷,mamicode.com
首页 > 其他好文 > 详细

基于队列实现生产者消费者

时间:2020-05-10 14:44:04      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:start   memcach   name   tar   获取数据   消费   ons   消息中间件   div   

# 进城之间数据隔离
# 进程之间通信(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()
        if food:
            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)

 

基于队列实现生产者消费者

标签:start   memcach   name   tar   获取数据   消费   ons   消息中间件   div   

原文地址:https://www.cnblogs.com/sun-10387834/p/12863010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!