python 并发编程 基于gevent模块实现并发的套接字通信
2024-09-05 15:51:32
之前线程池是通过操作系统切换线程,现在是程序自己控制,比操作系统切换效率要高
服务端
from gevent import monkey;monkey.patch_all()
import gevent
from socket import * def communicate(conn):
''' 通信功能 '''
while True:
try:
data = conn.recv(1024)
if not data:break
conn.send(data.upper()) except ConnectionResetError:
break conn.close() def server(ip,port):
''' 负责建立连接 accept''' server = socket(AF_INET, SOCK_STREAM)
server.bind((ip,port))
server.listen(5) while True:
conn,addr = server.accept()
c = gevent.spawn(communicate,conn) server.close() if __name__ == "__main__":
g = gevent.spawn(server,'127.0.0.1', 8080)
g.join()
客户端给服务端发送500个并发量,会看到一直不停的收消息
from socket import *
from threading import Thread
from threading import current_thread def client():
client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1', 8080)) while True:
client.send(("%s say helo" % current_thread().getName()).encode("utf-8"))
data = client.recv(1024)
print(data.decode("utf-8")) client.close() if __name__ == "__main__":
for i in range(500):
t = Thread(target=client,)
t.start()
最新文章
- CSS浏览器兼容性与解析问题终极归纳
- Print Common Nodes in Two Binary Search Trees
- iOS开发系列通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开
- 《TCP/IP详解 卷一》读书笔记-----TCP数据流
- Webstrom快捷键大全
- 【BZOJ】【4034】【HAOI2015】T2
- Storm的容错性
- oracle的to_number、to_char、to_date用法
- Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
- AOP Aspect Oriented Programming
- hdu 5363Key Set
- 猎豹上市(猎豹的广告收入中有70%来自BAT三家公司,总收入中有58%来自BAT)
- ubuntu 安装ruby rails
- rsyslog 配置
- Linode和DigitalOcean lnmp一键安装包哪个好?
- iPhone应用中加入评分功能
- PAT1124:Raffle for Weibo Followers
- 故障公告:docker swarm集群“群龙无首”造成部分站点无法访问
- Python入门 (二)
- 【原创】Python第一章