Python太多打开文件,eventlet和multiprocessing.dummy

时间:2015-02-09 20:44:12

标签: python multithreading python-2.7 eventlet

我在Linux上运行的Python 2.7脚本与IOError: [Errno 24] Too many open files崩溃。当我运行lsof -p <script_pid>以查看脚本打开的文件时,我看到越来越多的anon_inode文件。

此脚本首先使用eventlet从S3下载文件以实现并发。然后,它使用multiprocessing.dummy处理下载的文件以进行多线程处理。我已经单独运行多线程代码,发现当我为eventlet包含以下猴子补丁时,它只会泄漏文件描述符:

patcher.monkey_patch(thread=False)

关于如何解决这个问题的任何想法都将非常感谢!

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题,在Ubuntu上至少普通用户的开放文件限制默认为4096.所以,如果你要同时拥有超过4000个连接,你需要加强它。

解决方案 提高打开的文件描述符限制

以下是如何在ubuntu上执行此操作

/etc/security/limits.conf 的末尾添加一行

* soft nofile 16384    
* hard nofile 16384

第一栏描述了世界卫生组织的限制申请。 *是通配符,表示所有用户。要提高root的限制,您必须明确输入&root;&#39; root而不是&#39; *&#39;。

您还需要修改 /etc/pam.d/common-session * 并在结尾添加以下行:

session required pam_limits.so

注销然后重新登录才能使用新的最大限制, 用

测试
ulimit -n

https://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user

这里有一篇关于使用eventlet的警告的好文章 https://code.mixpanel.com/2010/10/29/gevent-the-good-the-bad-the-ugly/