python - 保留文件描述符以防止 FD 耗尽

标签 python

我有一个具有多个线程的 python 应用程序,其中线程 2 到 n 可能会打开任意数量的文件。我想确保当线程 1 尝试打开文件时,它绝对不会因为文件描述符耗尽而失败。简而言之,我想保留文件描述符而不打开它们。 我只能控制从线程 1 运行的代码,该线程是在仍然剩余大量文件描述符时生成的。

(作为一个例子,我想这可以通过从线程 1 打开/dev/null 几次来“保留”fds 来完成,并在线程 1 需要打开文件时关闭它,从而确保有至少有一个未使用的 fd,但这最终会引入竞争条件。)

有没有办法确保线程 1 在需要时可以使用 fd,而不需要修改线程 2-n 的操作?

最佳答案

您需要使用互斥锁。对于 python 2.x 来说是 mutexthread模块。

在你的“线程1”中,你将首先访问(获取/锁定)互斥体,然后关闭保留的fd并打开真正的fd,然后释放互斥体。

在其他线程中,您只需等待,直到可以获得互斥体,然后打开文件,然后释放互斥体。

对于 python3 来说,它是来自 threading 的锁。模块。

(注意:我不会评论打开/dev/null 是否能实现您想要的保留 fd 的目的,因为我对此没有信心。我只是为您提供一个解决方案以避免您询问的比赛:) )。

关于python - 保留文件描述符以防止 FD 耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233277/

相关文章:

python - 用装饰器包装的函数的关键字参数不起作用

python - 运行时警告: You're running the worker with superuser privileges: this is absolutely not recommended

java - 将 Python 网络代码转换为 Java

python - 如何给信件添加重音符号?

Python修饰函数保留部分签名

python - 折叠列并插入新行?

python - 多行字符串的正则表达式?

python - 使用 python : saving objects of the "pooled" functions 进行多处理

python - 如何使用scrapy下载图片然后上传到s3服务器

python - 如何在django中过滤没有被关注的用户