定期写入的文件被打开和读取时,会发生I/O死锁吗?
在我的服务器处理过程中,情况是这样的:
主要的后台处理:
处理一大堆文件,并把它们记录到MySQL数据库里。
每处理完500个文件,就会在一个单独的文件
/var/run/progress.log
里写入“进度报告”,比如“200/5000个文件完成”。这个过程是多进程的,有4个子进程,每个子进程确保处理不同的文件。
网页服务器处理:
每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在清理文件方面有点懒。