python單線程下實(shí)現(xiàn)多個(gè)socket并發(fā)過(guò)程詳解
先看服務(wù)端的代碼
import sys # import socket import time import gevent from gevent import socket from gevent import monkey monkey.patch_all() #類似于python中的黑魔法,把很多模塊的阻塞的變成非阻塞的,比如socket中的rece和send都變 # 為不阻塞了 def server(port): s = socket.socket() s.bind(("127.0.0.1",port)) s.listen(2000) while True: cli,add = s.accept() gevent.spawn(handle_request,cli) #通過(guò)gevent的啟動(dòng)一個(gè)協(xié)程,把客戶端的socket對(duì)象傳進(jìn)去 def handle_request(s): try: while True: data = s.recv(1024) print("收到的信息:",str(data,encoding="utf-8")) s.send(data) if not data: s.shutdown(socket.SHUT_WR) #把和客戶端這個(gè)鏈接銷毀 except Exception as ex: print(ex) finally: s.close() if __name__ == '__main__': server(8000)
在看客戶端的代碼,分別使用多線程和多進(jìn)程實(shí)現(xiàn)
import socket import gevent import threading import multiprocessing ''' ip_bind = ("127.0.0.1",8000) c = socket.socket() c.connect(ip_bind) while True: data = input("客戶端:") c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("服務(wù)端:",str(data,encoding="utf-8")) c.close() ''' import socket import gevent ip_bind = ("127.0.0.1",8000) c = socket.socket() c.connect(ip_bind) def f(n): while True: # c.send(bytes(n,encoding="utf-8")) data = str(n) c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("server:",str(data,encoding="utf-8")) c.close() x = [] if __name__ == '__main__': l = [] """ 多線程實(shí)現(xiàn)并發(fā)客戶端 for i in range(500): t = threading.Thread(target=f,args=[str(i),]) t.start() l.append(t) for t in l: t.join() """ # 多進(jìn)程實(shí)現(xiàn)并發(fā)客戶端 for i in range(100): p = multiprocessing.Process(target=f,args=[i,]) p.start() l.append(p) for p in l: p.join()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python網(wǎng)絡(luò)編程socket實(shí)現(xiàn)服務(wù)端、客戶端操作詳解
- Python Websocket服務(wù)端通信的使用示例
- python實(shí)現(xiàn)WebSocket服務(wù)端過(guò)程解析
- Python 網(wǎng)絡(luò)編程之TCP客戶端/服務(wù)端功能示例【基于socket套接字】
- python Socket之客戶端和服務(wù)端握手詳解
- Python+Socket實(shí)現(xiàn)基于TCP協(xié)議的客戶與服務(wù)端中文自動(dòng)回復(fù)聊天功能示例
- python實(shí)現(xiàn)socket客戶端和服務(wù)端簡(jiǎn)單示例
- Python Socket多線程并發(fā)原理及實(shí)現(xiàn)
- python如何使用socketserver模塊實(shí)現(xiàn)并發(fā)聊天
- python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能
- python 實(shí)現(xiàn)socket服務(wù)端并發(fā)的四種方式
相關(guān)文章
python bluetooth藍(lán)牙信息獲取藍(lán)牙設(shè)備類型的方法
這篇文章主要介紹了python bluetooth藍(lán)牙信息獲取藍(lán)牙設(shè)備類型的方法,具體轉(zhuǎn)化方法文中給大家介紹的非常詳細(xì),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11python?sklearn數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)縮放詳解
數(shù)據(jù)的預(yù)處理是數(shù)據(jù)分析,或者機(jī)器學(xué)習(xí)訓(xùn)練前的重要步驟,這篇文章主要為大家詳細(xì)介紹了sklearn數(shù)據(jù)預(yù)處理中數(shù)據(jù)縮放的相關(guān)知識(shí),感興趣的小伙伴可以學(xué)習(xí)一下2023-10-10Python.append()與Python.expand()用法詳解
今天小編就為大家分享一篇Python.append()與Python.expand()用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python實(shí)現(xiàn)自動(dòng)化辦公郵件合并功能
這篇文章主要介紹了python實(shí)現(xiàn)自動(dòng)化辦公郵件合并功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07win10下python3.8的PIL庫(kù)安裝過(guò)程
這篇文章主要介紹了win10下python3.8的PIL庫(kù)安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06使用PyCharm安裝pytest及requests的問(wèn)題
這篇文章主要介紹了使用PyCharm安裝pytest及requests的相關(guān)資料,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07python人工智能tensorflow函數(shù)tf.assign使用方法
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)tf.assign使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05TensorFlow實(shí)現(xiàn)checkpoint文件轉(zhuǎn)換為pb文件
今天小編就為大家分享一篇TensorFlow實(shí)現(xiàn)checkpoint文件轉(zhuǎn)換為pb文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02