[英]multiprocessing.dummy in Python is not utilising 100% cpu
[英]Python too many open files, eventlet and multiprocessing.dummy
我有一个在Linux上运行的Python 2.7脚本,该脚本因IOError: [Errno 24] Too many open files
崩溃IOError: [Errno 24] Too many open files
。 当我运行lsof -p <script_pid>
来查看脚本打开了哪些文件时,我看到anon_inode
文件的数量anon_inode
增加。
该脚本首先使用eventlet
从S3下载文件以实现并发。 然后,它使用multiprocessing.dummy
进行多线程处理下载的文件。 我已经独立运行了多线程代码,发现当我为eventlet包括以下猴子补丁时,它只会泄漏文件描述符:
patcher.monkey_patch(thread=False)
我将如何解决此问题的任何想法将不胜感激!
我也遇到了这个问题,在Ubuntu上,至少普通用户的打开文件限制默认为4096。因此,如果您要同时拥有约4000个以上的同时连接,则需要对此进行改进。
解决方案 : 提高打开文件描述符的限制
这是在Ubuntu上做的方法
在/etc/security/limits.conf的末尾添加一行
* soft nofile 16384
* hard nofile 16384
第一列描述了世卫组织将要申请的限额。 *是通配符,表示所有用户。 要提高对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
这也是一篇关于使用事件变量的注意事项的好文章https://code.mixpanel.com/2010/10/29/gevent-the-good-the-bad-the-ugly/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.