0

我正在 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) 在套接字关闭之前引发异常:错误的文件描述符。有没有办法关闭与套接字关联的文件?

谢谢。

4

0 回答 0