定期写入的文件被打开和读取时,会发生I/O死锁吗?

1 投票
2 回答
1013 浏览
提问于 2025-04-16 16:45

在我的服务器处理过程中,情况是这样的:

主要的后台处理:

  1. 处理一大堆文件,并把它们记录到MySQL数据库里。

  2. 每处理完500个文件,就会在一个单独的文件/var/run/progress.log里写入“进度报告”,比如“200/5000个文件完成”。

  3. 这个过程是多进程的,有4个子进程,每个子进程确保处理不同的文件。

网页服务器处理:

  1. 每10秒通过Ajax读取/var/run/progress.log的内容,并更新进度条。

当处理非常大的文件列表时(例如超过3GB的压缩包),处理大约2小时后就会卡住。

我找不到问题出在哪里。这是否意味着/var/run/progress.log导致了输入输出的死锁?

2 个回答

0

快速建议,确保你一定要关闭你的文件。

所以一定要使用try-except-final这个结构。

记住,final块里的内容总是会被执行,这样可以帮你避免很多麻烦哦 :)

0

在Linux系统上用Python编程时,这个操作应该不会造成阻塞。不过,可以试试使用一下os模块。

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

另外,要记得关闭文件,使用fh.close(),因为Python在清理文件方面有点懒。

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

撰写回答