我正在 Python 上编写 tcp 服务器。操作系统 - ubuntu 12.04 服务器是多进程的。主进程正在接受连接。接受的套接字减少并发送给工作人员:
<main process>
h = reduce_handle(conn.fileno())
self.queue.put(h)
Worker 为此连接创建单独的线程:
<worker process>
t = threading.Thread(target=sock_thread, args=(h, DBSession, Protocol))
t.start()
减少的套接字被恢复并在分离的线程上工作:
<Connection Thread>
fd=rebuild_handle(h)
sock = socket.fromfd(fd,socket.AF_INET,socket.SOCK_STREAM)
<data transmition>
sock.close()
一切正常。今天我有一个例外:
error: [Errno 24] Too many open files
重启服务器解决了这个问题,但未关闭的文件数量增加了。我监视它trow命令行:
lsof | grep python | wc -l
问题是什么?我在线程处关闭每个套接字。所有线程通常都正常工作并完成。sock.shutdown(socket.SHUT_RDWR) 在套接字关闭之前引发异常:错误的文件描述符。有没有办法关闭与套接字关联的文件?
谢谢。