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

时间:2014-01-20 11:49:24

标签: python

我有一个包含多个线程的python应用程序,线程2到n可能会打开任意数量的文件。我想确保当线程1尝试打开文件时,由于文件描述符耗尽,它肯定不会失败。简而言之,我想保留文件描述符而不打开它们。 我只能控制从线程1运行的代码,这是在剩下大量文件描述符的时候产生的。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

在你的其他主题中,你只需等到你可以获得互斥锁,然后打开文件,然后释放互斥锁。

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

(注意:我没有评论打开/ dev / null是否达到了你想要保留fd的目的,因为我对此没有信心。我只是为你提供一个解决方案避免你所说的比赛:))。