0

Pythonでtcpサーバーを書いています。OS - ubuntu 12.04 サーバーはマルチプロセスです。メインプロセスは接続を受け入れています。受け入れられたソケットが削減され、ワー​​カーに送信されました:

<main process>
h = reduce_handle(conn.fileno())
self.queue.put(h)

ワーカーは、この接続用に分離されたスレッドを作成します。

<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

サーバーを再起動するとこの問題は解決しましたが、閉じられていないファイルの数が増えました。コマンドラインで監視します:

lsof | grep python | wc -l 

何が問題ですか?スレッドで各ソケットを閉じます。すべてのスレッドは正常に機能し、終了します。ソケットを閉じる前に sock.shutdown(socket.SHUT_RDWR) を実行すると、例外が発生します: 不正なファイル記述子です。ソケットに関連付けられたファイルを閉じる方法はありますか?

ありがとう。

4

0 に答える 0