python實現高並發


理論方法

基於IO多路復用,windows中使用select實現,linux中使用select,pool,epoll實現。

windows中使用select,最多能監聽1024個文件句柄,使用輪詢檢測;

Linux中使用select最多能監聽1024個文件句柄,使用輪詢檢測;pool,監聽個數不限制;epoll使用邊緣觸發,回調通知

IO多路復用-擴展知識

官方定義:幫助開發者監聽多個IO句柄發生變化,用於幫助我們監聽多個socket是否發生變化(連接服務器的socket,和發送消息的socket)

為什么使用IO多路復用:在單線程中,由於我們使用服務端與多個客戶端收發消息時,由於python的代碼是由上往下執行的,因此當服務端和第一個客戶端收發消息時,服務端會處於accept這個狀態,這樣會造成等待,第二個客戶端肯定不能和服務端進行交互,為了解決這個問題,引出了IO多路復用。

代碼實現

import socket
import select
#可以連接很多個用戶
sk1=socket.socket()
sk2=socket.socket()
sk1.bind(('127.0.0.1',8001))
sk2.bind(('127.0.0.1',8002))

while True:
    rlist,w,e=select,select([sk1,conn1,conn2],[],5)
    for sk in rlist:
        if sk==sk1:
            # 服務端socket發生變化,新用戶來連接
            conn,addr=sk.accept()
            conn.send('hello')
            
        else:
            # 客戶端socket發生變化,老用戶發來了消息
            data=sk.recv()
            

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM