在Python中,select()
是一個用于多路復用的函數。它可以同時監視多個文件對象(包括套接字)的讀寫狀態,當其中任何一個文件對象就緒(可讀或可寫)時,select()
函數將返回該文件對象。
select()
函數的基本語法如下:
read_list, write_list, error_list = select.select(inputs, outputs, exceptions, timeout)
參數說明:
inputs
:需要監視的可讀對象的列表。outputs
:需要監視的可寫對象的列表。exceptions
:需要監視的異常對象的列表。timeout
:可選參數,設置超時時間,單位為秒(默認為阻塞狀態,直到有就緒的對象)。返回值說明:
read_list
:可讀對象列表中就緒的對象。write_list
:可寫對象列表中就緒的對象。error_list
:異常對象列表中就緒的對象。示例用法:
import select
import socket
# 創建套接字并監聽
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(5)
inputs = [server_socket]
while True:
# 使用select函數進行監視
readable, writable, exceptional = select.select(inputs, [], [])
for sock in readable:
if sock is server_socket:
# 有新的連接請求
client_socket, client_address = server_socket.accept()
inputs.append(client_socket)
else:
# 有數據可讀
data = sock.recv(1024)
if data:
print('Received:', data.decode())
else:
# 客戶端斷開連接
sock.close()
inputs.remove(sock)
以上示例中,使用select()
函數來監視套接字對象的可讀狀態。當有新的連接請求時,將新的客戶端套接字添加到inputs
列表中,當客戶端發送數據時,將數據打印出來。