如何在Python中非阻塞accept()?

Eli*_*any 0 python sockets nonblocking

我无法使用线程,因此我想编写一个服务器程序,该程序可能会在一段时间后中断:

d = show_non_modal_dialog(“为客户服务”)
s =套接字(...)
s.bind(...)
s.listen()
同时(!user_pressed_cancel())
{
  s.accept()#定时接受大约1秒钟
  如果timed_out:
    继续
  serve_client
  close_client_sock
}
hide_non_modal_dialog(d)

pyf*_*unc 5

使用非阻塞套接字,并在其上调用accept。

s.setblocking(0)
Run Code Online (Sandbox Code Playgroud)

您还可以设置超时以阻止套接字操作

socket.settimeout(value)
Run Code Online (Sandbox Code Playgroud)

您的代码中似乎也有问题

accept()返回一个(conn,address)对值。所以你的代码应该是

conn, address = s.accept()
Run Code Online (Sandbox Code Playgroud)