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

0 投票
1 回答
7891 浏览
提问于 2025-04-16 04:47

我不能使用线程,所以我想写一个可以在一段时间后被中断的服务器程序:

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 个回答

7

使用一个非阻塞的套接字,并在这个套接字上调用accept。

s.setblocking(0)

你也可以为阻塞的套接字操作设置一个超时时间。

socket.settimeout(value)

你的代码中似乎也有个问题。

accept()会返回一对值(连接和地址),所以你的代码应该是这样:

conn, address = s.accept()

撰写回答