2015-02-09 44 views
2

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

对我怎么能解决这个任何想法,将不胜感激!

+1

我注册了您的问题在这里https://github.com/eventlet/eventlet/issues/197 将您共享隔离代码测试? 你是否遇到过只有'monkey_patch()'的问题? – temoto 2015-02-09 22:02:32

+0

谢谢,@temoto!只是monkey_patch()引起了多线程的严重问题。我刚刚发现我可以有选择地使用import_patched修补 - 你知道eventlet.import_patched('boto.s3.connection')是否足够吗?我想我不完全明白需要修补的东西。如果这不是一个合适的修复,我会发布隔离代码。 – 2015-02-09 22:25:44

+0

选择性补丁一般效果很好。除了目标模块在一段时间后在功能中导入时 - 它将导入未修补的版本。请继续发布您的代码。 – temoto 2015-02-11 14:23:40

回答

0

我也是在Ubuntu上运行到这个问题,至少对普通用户默认打开的文件限制为4096。所以,如果你将有超过〜4000个,你需要将这个了同时连接。

解决方案抬起打开文件描述符限制

这里是如何做到这一点在Ubuntu

添加一行结束的在/etc/security/limits.conf

* soft nofile 16384  
* hard nofile 16384 

第一栏描述世界卫生组织的限制是应用fo河*是通配符,表示所有用户。为了提高root的限制,你必须明确地输入'root'而不是'*'。

您还需要编辑/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

而且这里是对我们的告诫好文章荷兰国际集团eventlets https://code.mixpanel.com/2010/10/29/gevent-the-good-the-bad-the-ugly/

+0

你能从链接发布一些内容吗? – Robert 2015-05-01 14:48:26