日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

学习笔记(35续):Python网络编程并发编程-基于gevent及线程池实现的并发套接字通讯

發布時間:2023/12/10 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记(35续):Python网络编程并发编程-基于gevent及线程池实现的并发套接字通讯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.基于線程池實現并發套接字通訊:因為套接字涉及地是I/O密集模型,因此使用多線程會有高效率

''' 服務器 '''#基于線程池完成并發的套接字通訊 from socket import * from threading import Thread from concurrent.futures import ThreadPoolExecutordef communicate(conn):while True:try:data = conn.recv(1024)#1024表示接收的字節最大量是1024bytesprint('這是客戶端的請求數據',data)conn.send(data.upper())except ConnectionResetError:breakdef connect(ip,port):phone = socket(AF_INET,SOCK_STREAM)phone.bind((ip,port))phone.listen(5)while True:res = phone.accept()conn,client_addr = rest = Thread(target=communicate,args=(conn,))t.start()phone.close()if __name__ == '__main__':pool = ThreadPoolExecutor(5)pool.submit(connect,'127.0.0.1',8081)''' 客戶端 '''import socketdef client(ip,port):phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)phone.connect((ip,port))while True:cmd = input("請輸入命名:")if not cmd:continuephone.send(cmd.encode('utf-8'))res = phone.recv(1024)#接收小于1024bytes的數據print('服務器返回來的數據:',res.decode('gbk'))print('*'*50)#5、關閉套接字phonephone.close()if __name__ == '__main__':client('127.0.0.1',8081)

2.基于gevent協程實現并發套接字通訊

''' 服務器 '''#基于gevent完成并發的套接字通訊 from socket import * from threading import Thread from gevent import spawn,monkeymonkey.patch_all() def communicate(conn):while True:try:data = conn.recv(1024)#1024表示接收的字節最大量是1024bytesprint('這是客戶端的請求數據',data)conn.send(data.upper())except ConnectionResetError:breakdef connect(ip,port):phone = socket(AF_INET,SOCK_STREAM)phone.bind((ip,port))phone.listen(5)while True:res = phone.accept()conn,client_addr = resspawn(communicate,conn).join()if __name__ == '__main__':g = spawn(connect,'127.0.0.1',8090)g.join()''' 客戶端 ''' import socket from threading import currentThread,Threaddef client():phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.connect(('127.0.0.1',8090))while True:# cmd = input("請輸入命名:")# cmd =# if not cmd:continuephone.send(('%s hello'%currentThread().getName()).encode('utf-8'))res = phone.recv(1024)#接收小于1024bytes的數據print('服務器返回來的數據:',res.decode('gbk'))print('*'*50)#5、關閉套接字phonephone.close()if __name__ == '__main__':for i in range(500):t = Thread(target=client)t.start()

?

總結

以上是生活随笔為你收集整理的学习笔记(35续):Python网络编程并发编程-基于gevent及线程池实现的并发套接字通讯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。