Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【吴师傅的Python面包店】Day 8

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

原创
作者头像
leland
修改于 2021-10-08 12:19:07
修改于 2021-10-08 12:19:07
26500
代码可运行
举报
文章被收录于专栏:leland的专栏leland的专栏
运行总次数:0
代码可运行

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

为了排查顾客下了单但是没有拿到面包的问题,吴师傅要求每位面包师傅根据订单号生产面包,并且面包按订单号给到对应顾客。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""每个面包师傅根据订单数生产面包,并且面包要按订单号给到顾客。"""

import time
import threading
import multiprocessing
import random

import zmq


PRODUCER_NUM = 3

def order(topic, order_id, pub_socket):
    """下单。"""
    
    print('Order:%s, topic:%s' % (order_id, topic))
    pub_socket.send_multipart([topic.encode(), order_id.encode()])


def worker(topic, context):

    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)    # 设置接受超时
    print('Windows:', topic)
    while 1:
        msg = None
        try:
            msg, order_id = sub_socket.recv_multipart()
        except Exception as e:
            pass
        else:
            if msg:
                # 师傅收到订单,制作完成并返回了面包
                print('Finished: %s, %s' % (order_id.decode(), msg.decode()))
        time.sleep(1)


def run_bakery():
    context = zmq.Context()
    workers = []
    for i in range(PRODUCER_NUM):
        # 每个师傅对应一条买面包店队伍
        topic = 'P:%s' % i
        w = threading.Thread(target=worker, args=(topic, context))
        workers.append(w)
        w.start()
    for w in workers:
        w.join()

def run_customer():
    # 模拟顾客订单
    context = zmq.Context()
    pub_socket = context.socket(zmq.PUB)
    pub_socket.bind("tcp://*:5555")

    time.sleep(2)
    orders_num = random.randint(6, 10)
    for j in range(orders_num):
        i = random.randint(0, PRODUCER_NUM-1)
        topic = 'P:%s' % i
        order_id = "id_%s" % j
        time.sleep(0.1)
        order(topic, order_id, pub_socket)

def run():
    p1 = multiprocessing.Process(target=run_bakery)
    p2 = multiprocessing.Process(target=run_customer)
    p1.start()
    p2.start()
    p1.join()
    p2.join()

if __name__ == "__main__":
    run()

国庆结束了,吴师傅的面包店还会继续开下去吗?

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【吴师傅的Python面包店】Day 5
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
2800
【吴师傅的Python面包店】Day 1
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
2480
【吴师傅的Python面包店】Day 6
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
3260
【吴师傅的Python面包店】Day 7
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
3830
【吴师傅的Python面包店】Day 4
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
2900
【吴师傅的Python面包店】Day 2
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
3730
Python学习(十)---- python中的进程与协程
原文地址: https://blog.csdn.net/fgf00/article/details/52790360 编辑:智能算法,欢迎关注! 上期我们一起学习了python中的线程的相关知识
智能算法
2018/10/08
5450
【吴师傅的Python面包店】Day 3
前言:十一国庆只能待在家的吴师傅十分无聊,决定开一家Python面包店打发下时间。后面的每一天,吴师傅都会用一段代码简单实现卖面包的功能,并且解决前一天暴露的问题。
leland
2021/10/05
2660
分布式初探——面包店算法与多线程锁
这个算法是由分布式系统大佬lamport提出的,用来解决多线程抢占资源的锁控制问题。在之前介绍数据库事务原则的时候,曾经介绍过隔离性。不仅在数据库当中,在并发系统当中,只要出现多个线程抢占一个资源的情况,就必然需要引入锁来实现隔离。保证一次只能有一个线程占有资源,防止线程之间的读写操作混乱,导致数据错误。今天讲的面包店算法,就是针对这个场景,实现线程之间隔离的。
TechFlow-承志
2020/03/05
8950
分布式初探——面包店算法与多线程锁
ZMQ
ZeroMQ (也称为 ØMQ,0MQ,或 zmq)看起来像一个可嵌入的网络库,但其作用类似于并发框架。它提供了跨进程、进程间、 TCP 和多播等各种传输方式携带原子消息的套接字。您可以使用诸如扇出、发布-订阅、任务分配和请求-应答等模式将套接字 N 到 N 连接起来。它的速度足以成为集群产品的结构。它的异步 I/O 模型为您提供了可伸缩的多核应用程序,构建为异步消息处理任务。它有许多语言 API,并且运行在大多数操作系统上。
为为为什么
2024/09/26
3530
ZMQ
zmq 协议_zmq通信协议
场景说明: 我们定义一个非阻塞 的消息通道, 用作发送特定的Python结构体数据,包含三个文件如下:
全栈程序员站长
2022/11/04
1.4K0
Python量化交易优化:降低延迟的有效策略
在现代金融市场中,量化交易已经成为投资领域中一种越来越普遍和重要的交易方式。然而,对于量化交易策略来说,延迟问题是一个不可忽视的挑战。本篇博客将深入探讨在使用Python进行量化交易时,如何有效地降低延迟,提高交易系统的执行效率。
很酷的站长
2024/01/01
4160
Python量化交易优化:降低延迟的有效策略
一篇文章梳理清楚 Python 多线程与多进程
在学习Python的过程中,有接触到多线程编程相关的知识点,先前一直都没有彻底的搞明白。今天准备花一些时间,把里面的细节尽可能的梳理清楚。
吾非同
2021/12/13
9930
一篇文章梳理清楚 Python 多线程与多进程
Python与线程
进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。
星陨1357
2023/03/14
3370
Python与线程
Python之进程
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据
新人小试
2018/04/12
2.4K0
Python之进程
『笔记』可扩展架构设计之消息队列
众所周知,开发低耦合系统是软件开发的终极目标之一。低耦合的系统更加容易扩展,低耦合的模块更加容易复用,更易于维护和管理。我们知道,消息队列的主要功能就是收发消息,但是它的作用不仅仅只是解决应用之间的通信问题这么简单。消息队列作为常用的中间件,经常被用来对系统解耦,对模块解耦。增强系统的可扩展性和模块的可复用性。
Cloud-Cloudys
2020/07/07
7030
『笔记』可扩展架构设计之消息队列
Python 线程&进程与协程
线程是进程的执行单元,对于大多数程序来说,可能只有一个主线程,但是为了能够提高效率,有些程序会采用多线程,在系统中所有的线程看起来都是同时执行的,例如,现在的多线程网络下载程序中,就使用了这种线程并发的特性,程序将欲下载的文件分成多个部分,然后同时进行下载,从而加快速度.虽然线程并不是一个容易掌握和使用的概念,但是如果运用得当,还是可以获得很不错的性能的.
王瑞MVP
2022/12/28
7880
python(五)
创建线程对象以后,可以调用它的 start()方法来启动,该方法自动调用该类对象的 run()方法。
赤蓝紫
2023/01/02
2370
python(五)
python之线程、进程
    从列表中取一个数据,相当于是复制了一份列表中的数据,列表中的元数据并没有被改动
py3study
2020/01/03
3770
Python 进阶(二):多进程
进程:通常一个运行着的应用程序就是一个进程,比如:我启动了一个音乐播放器,现在它就是一个进程。线程:线程是进程的最小执行单元,比如:我在刚启动的音乐播放器上选了一首歌曲进行播放,这就是一个线程。
Python小二
2020/08/18
4430
相关推荐
【吴师傅的Python面包店】Day 5
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验