生产者和消费者模式-代码
2023-09-14 09:00:35 时间
函数:生产者和消费者
import random from queue import Queue from threading import Thread, current_thread import time # 实例化一个队列 myq = Queue() # 定义生产者 def producer(): while True: tmp = random.randint(1,100) myq.put(tmp) print("%s生产了%s,生产后,现在产品总量:%s" % (current_thread().name, tmp, myq.qsize())) time.sleep(0.5) # 定义消费者 def consumer(): while True: print("%s消费了%s,剩余产品%s" % (current_thread().name, myq.get(), myq.qsize())) time.sleep(1.1) # 启动生产者和消费者 # 启动生产者 tp = Thread(target=producer) tp.start() # 启动消费者 for i in range(2): tc = Thread(target=consumer) tc.start()
函数2:
# 编写一个基于tcp的echo服务器(回响服务器,即将客户端发送的信息返回给客户端), # 要求使用线程和生产者消费者模型(提示:一个线程accept--生产者;两个线程用于接收和发送--消费者)。 import socket from threading import Thread, current_thread from queue import Queue # 生产者 def accept_t(queue): print("当前线程",current_thread().name) # client_info = server.accept() # queue.put(client_info) # 消费者recv def recv_t(queue, queue_data): client_info = queue.get() client_sock = client_info[0] data = client_sock.recv(1024) queue_data.put(data) pass try: print(data.decode()) except: print(data.decode('gbk')) # 消费者send def send_t(queue_data): data = queue_data.get() client_sock = client_info[0] client_sock.send(data) client_sock.close() pass if __name__ == "__main__": client_info = None server = None # 创建服务器的套接字(监听套接字) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置地址复用属性 server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定IP和端口 server_address = ("", 7972) server.bind(server_address) # 监听 server.listen(128) queue = Queue() queue_data = Queue() t1 = Thread(target=accept_t, args=(queue)) t1.start() t2 = Thread(target=recv_t, args=(queue, queue_data)) t2.start() t3 = Thread(target=send_t, args=(queue_data,)) t3.start() t1.join() t2.join() t3.join()
类:生产者和消费者
import socket from queue import Queue from threading import Thread import time import chardet client_queue = Queue() # 生产者 class Producer(Thread): def __init__(self, tcp_server): super().__init__() self.tcp_server = tcp_server def run(self): client_info = self.tcp_server.accept() client_queue.put(client_info) # 消费者 class Consumer(Thread): def __init__(self): super().__init__() def run(self): client_info = client_queue.get() client_sock = client_info[0] client_addr = client_info[1] msg = client_sock.recv(1024) print("原始字节流:",msg) a = 'abcd'.encode("UTF-8") print('a:', a) # a = msg.decode() code = chardet.detect(a) print('获取到a的编码是',code['encoding']) print("%s说:%s" % (client_addr, msg.decode())) client_sock.send(msg.decode().encode('gbk')) client_sock.close() print('consumer is over') # 主函数 def main(): tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) tcp_server.bind(("", 7892)) tcp_server.listen(128) p = Producer(tcp_server) c1 = Consumer() # c2 = Consumer() p.start() c1.start() # c2.start() # time.sleep(2) p.join() c1.join() # c2.join() tcp_server.close() if __name__ == '__main__': main()
相关文章
- 关于聚合卡牌盲盒模式系统开发逻辑方案设计程序(成熟代码)
- Android启动模式FLAG_ACTIVITY_CLEAR_TOP
- 利用策略模式优化过多 if else 代码
- 浅谈持币生息DAPP项目模式系统开发技术讲解代码分析
- zblog在线问答插件模板兼容代码,宁静致远主题已适配夜间模式
- 工厂模式代码实例详解
- PHP设计模式 - 门面模式(Facade)通俗易懂 / 友好示例代码
- 【设计模式】状态模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
- 【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
- 【设计模式】备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
- 【EventBus】EventBus 源码解析 ( 事件发送 | postToSubscription 方法 | EventBus 线程模式处理细节 )
- 【Java AWT 图形界面编程】Dialog 对话框 ( 简介 | 模式对话框 | 非模式对话框 | Dialog 构造函数 | Dialog 代码示例 | 向 Dialog 对话框添加布局组件 )
- 如何使用FindFunc在IDA Pro中寻找包含指定代码模式的函数代码
- 【前端探索】告别烂代码!用责任链模式封装网络请求
- ubuntu 16.04 进入单用户模式详解程序员
- java设计模式之状态模式详解架构师
- Python实现装饰模式的一段代码详解编程语言
- 安全模式Linux: 告别安全担忧(安全模式Linux)
- Linux待机模式下的唤醒(linux待机唤醒)
- Linux FTP模式:实现轻松文件传输(linuxftp模式)
- 操作使用 Linux 文本模式指南(linux文本模式)
- 模式Linux下使用耳机模式实现无缝音乐体验(linux耳机)
- 微信回应因青少年模式违规被诉讼:虚心接受,将不断完善各项保护措施
- 微信视频号升级青少年模式 将强化弹窗提示功能
- 在Redis中使用开关机模式(开关redis)
- MySQL三种常用数据表模式解析(mysql三大模式)
- Redis哨兵模式的独立开通(只开通redis哨兵端口)
- Redis集群模式优秀的性能吗(redis集群模式好吗)
- 用Div仿showModalDialog模式菜单的效果的代码
- JavaScript代码复用模式实例分析
- 两个select多选模式的选项相互移动(示例代码)
- JavaScript设计模式之原型模式(Object.create与prototype)介绍