我有一個Python腳本2.7在Linux上運行,與IOError: [Errno 24] Too many open files
崩潰。當我運行lsof -p <script_pid>
以查看腳本已打開的文件時,我看到的文件數量不斷增加anon_inode
。使用eventlet
併發從S3Python中打開的文件太多,eventlet和multiprocessing.dummy
此腳本首先下載文件。然後使用multiprocessing.dummy
處理下載的文件進行多線程。我已經運行在隔離的多線程代碼,發現它只是泄漏文件描述符,當我包括以下猴子打補丁eventlet:
patcher.monkey_patch(thread=False)
對我怎麼能解決這個任何想法,將不勝感激!
我註冊了您的問題在這裏https://github.com/eventlet/eventlet/issues/197 將您共享隔離代碼測試? 你是否遇到過只有'monkey_patch()'的問題? – temoto 2015-02-09 22:02:32
謝謝,@temoto!只是monkey_patch()引起了多線程的嚴重問題。我剛剛發現我可以有選擇地使用import_patched修補 - 你知道eventlet.import_patched('boto.s3.connection')是否足夠嗎?我想我不完全明白需要修補的東西。如果這不是一個合適的修復,我會發布隔離代碼。 – 2015-02-09 22:25:44
選擇性補丁一般效果很好。除了目標模塊在一段時間後在功能中導入時 - 它將導入未修補的版本。請繼續發佈您的代碼。 – temoto 2015-02-11 14:23:40