Самое простое решение иметь неблокирующий сокет в Python - просто использовать метод setblocking () в сокете. Примерно так:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setblocking(0)
# bind, accept or connect stuff
s.recv(100) # will not block and if no data available a "socket.error"
# exception will be raised
Вы также можете взглянуть на settimeout ()