前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【吴师傅的Python面包店】Day 6

【吴师傅的Python面包店】Day 6

原创
作者头像
leland
修改2021-10-08 20:12:37
3080
修改2021-10-08 20:12:37
举报
文章被收录于专栏:leland的专栏

前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。

顾客各有所爱,吴师傅为每位师傅分配一个专属售卖窗口,这样顾客就可以去特定窗口买自己想要的面包了。

代码语言:javascript
复制
"""吴师傅为每位师傅分配了专属的一个售卖窗口,客户可以在喜欢师傅的窗口买到想要的面包了。"""

import time
import threading
import random

import zmq

TOTAL = []
END_FLAG = False
PRODUCER_NUM = 3
CONSUMER_NUM = 3

def producer(topic, pub_socket):
    """生产面包。"""
    num = 0
    while True:
        time.sleep(0.2)
        pub_socket.send(topic.encode('utf8'))
        # print('Producer: I produced one:', topic)
        num += 1
        if num >= 3:
            # 师傅做3个面包就要下班了。
            break

def consumer(topic, context, freq):
    global END_FLAG
    sub_socket = context.socket(zmq.SUB)
    sub_socket.connect("tcp://localhost:5555")
    sub_socket.setsockopt(zmq.SUBSCRIBE, topic.encode('utf8'))
    sub_socket.setsockopt(zmq.RCVTIMEO, 2000)    # 设置接受超时
    
    while not END_FLAG:
        msg = None
        try:
            msg = sub_socket.recv()
        except Exception as e:
            pass
        else:
            if msg:
                print('Consumer: I had buy:', msg.decode())
        time.sleep(freq)

def run():
    context = zmq.Context()
    pub_socket = context.socket(zmq.PUB)
    pub_socket.bind("tcp://*:5555")
    producers = []
    consumers = []
    for i in range(PRODUCER_NUM):
        # 每个师傅对应一条买面包店队伍
        topic = 'P:%s' % i
        p = threading.Thread(target=producer, args=(topic, pub_socket))
        producers.append(p)
        p.start()

        c = threading.Thread(target=consumer, args=(topic, context, i))
        consumers.append(c)
        c.start()
    for p in producers:
        p.join()
    global END_FLAG
    END_FLAG = True    # 关门了,顾客消费也要停止
    for c in consumers:
        c.join()

if __name__ == "__main__":
    run()

吴师傅发现有的师傅面包很好卖,顾客经常买不到;有的师傅面包不好卖,做多了卖不出去。吴师傅想要改变售卖模式,提升资源利用率。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档