我有一个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