python實現高併發

理論方法

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

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

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

IO多路複用-擴展知識

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

爲何使用IO多路複用:在單線程中,因爲咱們使用服務端與多個客戶端收發消息時,因爲python的代碼是由上往下執行的,所以當服務端和第一個客戶端收發消息時,服務端會處於accept這個狀態,這樣會形成等待,第二個客戶端確定不能和服務端進行交互,爲了解決這個問題,引出了IO多路複用。socket

代碼實現

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()
            
相關文章
相關標籤/搜索