我关于Python编写的TCP服务器。 操作系统 - Ubuntu的12.04服务器是多进程。 主过程接受连接。 接受插座减少,发送到工人:
h = reduce_handle(conn.fileno())
self.queue.put(h)
工人创造了这个连接独立的线程:
t = threading.Thread(target=sock_thread, args=(h, DBSession, Protocol))
t.start()
减少插座被回收并在separeted线程工作:
fd=rebuild_handle(h)
sock = socket.fromfd(fd,socket.AF_INET,socket.SOCK_STREAM)
sock.close()
一切工作正常。 今天,我得到了一个异常:
error: [Errno 24] Too many open files
重新启动服务器解决了这个问题,但没有结束的文件的数量而增加。 我监视它特罗命令行:
lsof | grep python | wc -l
问题是什么? 我关闭每个插座的螺纹。 所有线程都正常工作和完成。 sock.shutdown(socket.SHUT_RDWR)插座结束前引发例外:坏的文件描述符。 有没有办法关闭与套接字关联的文件?
谢谢。