python 并发编程 基于gevent模块实现并发的套接字通信
Posted mingerlcm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 并发编程 基于gevent模块实现并发的套接字通信相关的知识,希望对你有一定的参考价值。
之前线程池是通过操作系统切换线程,现在是程序自己控制,比操作系统切换效率要高
服务端
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()
以上是关于python 并发编程 基于gevent模块实现并发的套接字通信的主要内容,如果未能解决你的问题,请参考以下文章
并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信