Python socket.accept非阻塞?
有没有一种方法可以以非阻塞方式使用python的socket.accept()来简单地运行它,并让我检查它是否有任何新连接?我 真的
不想使用线程。谢谢。
-
您可能想要类似的东西
select.select()
(请参阅文档)。您提供select()
了三个套接字列表:您要监视其可读性,可写性和错误状态的套接字。当新的客户端正在等待时,服务器套接字将是可读的。该
select()
功能将一直阻塞,直到套接字状态之一改变为止。timeout
如果您不想永远阻塞,可以指定第四个可选参数。这是一个哑响应服务器示例:
import select import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind(('', 8888)) server_socket.listen(5) print "Listening on port 8888" read_list = [server_socket] while True: readable, writable, errored = select.select(read_list, [], []) for s in readable: if s is server_socket: client_socket, address = server_socket.accept() read_list.append(client_socket) print "Connection from", address else: data = s.recv(1024) if data: s.send(data) else: s.close() read_list.remove(s)
Python同时使用
epoll
,poll
以及kqueue
用于支持它们的平台上实现。它们是的更有效版本select
。