Python 协程实现socket并发

socket多并发

socket可以实现单个客户端进行请求访问,它可以通过 socketserver来实现并发功能呢,socketserver是通过 启用多线程实现并发,在这里我们也可以通过gevent协程 来实现单个线程下的多并发。

socket server:

1import gevent 2from gevent import socket,monkey 3monkey.patch_all() 4 5 6def server(port): 7 s = socket.socket() 8 s.bind(('0.0.0.0', port)) 9 s.listen(500) 10 while True: 11 cli, addr = s.accept() 12 13 # socket会创建一个线程链接,这里会交给协程处理 14 # 链接后通过gevent启动一个协程 15 # 接收一个函数,与链接实例参数 16 gevent.spawn(handle_request, cli) 17 18 19# 所有交互都由handle处理 20def handle_request(conn): 21 try: 22 while True: 23 data = conn.recv(1024) 24 print("recv:", data) 25 conn.send(data) 26 if not data: 27 # 如果没有数据就关闭Client端 28 conn.shutdown(socket.SHUT_WR) 29 # 如果出现异常就打印异常 30 except Exception as ex: 31 print(ex) 32 # 最后中断实例的conn 33 finally: 34 conn.close() 35if __name__ == '__main__': 36 server(8001)

socket client(多次开启,测试访问):

1import socket 2 3# 链接服务端 4HOST = 'localhost' # The remote host 5PORT = 8001 # The same port as used by the server 6s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7s.connect((HOST, PORT)) 8 9# 数据请求 10while True: 11 msg = bytes(input(">>:"),encoding="utf8") 12 s.sendall(msg) 13 data = s.recv(1024) 14 #print(data) 15 16 # repr格式化输出 17 print('Received', repr(data)) 18s.close()
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )