我在Python上编写tcp服务器。 Os - ubuntu 12.04 服务器是多进程的。主要流程是接受连接。接受的套接字减少并发送给工人:
<main process>
h = reduce_handle(conn.fileno())
self.queue.put(h)
Worker为此连接创建单独的Thread:
<worker process>
t = threading.Thread(target=sock_thread, args=(h, DBSession, Protocol))
t.start()
已恢复减少的套接字并在separeted线程中工作:
<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
重新启动服务器解决了这个问题,但是未关闭的文件数量增加了。我监视它的特罗命令行:
lsof | grep python | wc -l
有什么问题?我在线程关闭每个套接字。所有线程通常都可以工作和完成。套接字关闭之前的sock.shutdown(socket.SHUT_RDWR)引发异常:错误的文件描述符。 有没有办法关闭与套接字关联的文件?
感谢。