当套接字将在另一个线程中关闭时,如何在选择时修复EBADF

时间:2019-05-13 19:55:23

标签: python-3.x

当我的tcp服务器脚本中的另一个线程中的客户端套接字关闭时,我在选择时遇到EBADF错误。我在Python 3.6中工作

我在运行select的第一个线程中有2个线程,并且通过某种逻辑关闭了另一个线程的套接字。但是有时,我并非总是在选择行中得到EBADF。如果我在第一个线程中用相同的代码关闭客户端套接字,一切正常。

第一个线程

CONNECTION_LIST = []
read_sockets,write_sockets,error_sockets = select.select(CONNECTION_LIST,CONNECTION_LIST,[])
for sock in read_sockets:
...read socket code
for wsock in write_sockets:
...write socket code

第二个线程

CONNECTION_LIST.remove(sock)
write_sockets.remove(sock)
sock.close()

该如何解决?我认为需要使用队列,但不知道如何。谢谢。

0 个答案:

没有答案