gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:46 24 4
gpt4 key购买 nike

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

任何关于如何解决这个问题的想法都将不胜感激!

最佳答案

我也遇到了这个问题,在 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

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

关于Python 太多打开的文件、eventlet 和 multiprocessing.dummy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com