我有一个具有多个线程的 python 应用程序,其中线程 2 到 n 可能会打开任意数量的文件。我想确保当线程 1 尝试打开文件时,它绝对不会因为文件描述符耗尽而失败。简而言之,我想保留文件描述符而不打开它们。 我只能控制从线程 1 运行的代码,该线程是在仍然剩余大量文件描述符时生成的。
(作为一个例子,我想这可以通过从线程 1 打开/dev/null 几次来“保留”fds 来完成,并在线程 1 需要打开文件时关闭它,从而确保有至少有一个未使用的 fd,但这最终会引入竞争条件。)
有没有办法确保线程 1 在需要时可以使用 fd,而不需要修改线程 2-n 的操作?
最佳答案
您需要使用互斥锁。对于 python 2.x 来说是 mutex或thread模块。
在你的“线程1”中,你将首先访问(获取/锁定)互斥体,然后关闭保留的fd并打开真正的fd,然后释放互斥体。
在其他线程中,您只需等待,直到可以获得互斥体,然后打开文件,然后释放互斥体。
对于 python3 来说,它是来自 threading 的锁。模块。
(注意:我不会评论打开/dev/null 是否能实现您想要的保留 fd 的目的,因为我对此没有信心。我只是为您提供一个解决方案以避免您询问的比赛:) )。
关于python - 保留文件描述符以防止 FD 耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233277/