как сделать неблокирующую accept () в Python? - PullRequest
0 голосов
/ 30 сентября 2010

Я не могу использовать потоки, поэтому я хочу написать серверную программу, которая может быть прервана через некоторое время:

d = show_non_modal_dialog("serving clients")
s = socket(...)
s.bind(...)
s.listen()
while (!user_pressed_cancel())
{
  s.accept() # timed accept for like 1 second
  if timed_out:
    continue
  serve_client
  close_client_sock
}
hide_non_modal_dialog(d)

1 Ответ

4 голосов
/ 30 сентября 2010

Используйте неблокирующий сокет и вызовите прием на этом.

s.setblocking(0)

Вы также можете установить тайм-аут для блокировки операций сокета

socket.settimeout(value)

В вашем коде, похоже, также есть проблема

accept () возвращает значение пары (conn, address). поэтому ваш код должен был быть

conn, address = s.accept()
...