打开的文件太多了。 Python多进程TCP服务器

时间:2013-05-05 16:31:51

标签: python sockets multiprocessing

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

感谢。

0 个答案:

没有答案