如果我打开并读取周期性写入的文件,会发生I/O死锁吗?



在我的服务器进程中,它看起来像这样:

主后端进程:

  1. 处理庞大的文件列表,并记录在MySQL中

  2. 每完成500个文件,它将"进度报告"写入一个单独的文件/var/run/progress.log,如"200/5000个文件完成"

  3. 它是多进程的,有4个子进程,每个子进程确保在一个单独的文件上运行。

Web服务器进程:

  1. 通过Ajax每10秒读取/var/run/progress.log的输出,并向进度条报告。

当处理一个非常大的文件列表(例如超过3gb的存档)时,进程在处理大约2小时后锁定。

我不知道发生了什么事。这是否意味着/var/run/progress.log导致了I/O死锁?

在Linux上的python中,这应该不会阻塞,但是尝试使用os模块

os.open(file, os.O_NONBLOCK | os.O_RDONLY)

并确保关闭fh.close()文件,因为Python有点懒于清理文件。

http://docs.python.org/library/os.html

快速建议,确保(比如,超级确定)你关闭了你的文件

所以对于

总是使用try-except-final块

请记住,最后一个块的内容将永远被执行,这将避免你很多头痛:)

最新更新