如果打开并读取周期性写入的文件,是否会发生I/O死锁?
在我的服务器进程中,它看起来像这样:
主要后端进程:
处理大量文件 和 ,将它们记录在 MySQL 中。
每完成 500 个文件,它就会将“进度报告”写入单独的文件
/var/run/progress.log
,例如“完成 200/5000 个文件”它是由 4 个子文件进行多处理的,每个文件都有 4 个子文件确保在单独的文件上运行。
Web服务器进程:
- 通过Ajax每10秒读取
/var/run/progress.log
的输出并向进度条报告。
当处理非常大的文件列表(例如超过 3 GB 的存档)时,进程会在处理大约 2 小时后锁定。
我找不到发生了什么事。这是否意味着 /var/run/progress.log
导致了 I/O 死锁?
In my server process, it looks like this:
Main backend processes:
Processes Huge list of files and , record them inside MySQL.
On every 500 files done, it writes "Progress Report" to a separate file
/var/run/progress.log
like this "200/5000 files done"It is multi-processed with 4 children, each made sure to run on a separate file.
Web server process:
- Read the output of
/var/run/progress.log
every 10 seconds via Ajax and report to progress bar.
When processing a very large list of files (e.g. over 3 GB archive), the processes lock up after about 2 hours of processing.
I can't find what is going on. Does that mean that /var/run/progress.log
caused an I/O deadlock?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 Linux 上的 python 中,这不应该阻塞,但是尝试使用 os 模块
并确保关闭文件 fh.close() ,因为 Python 有点懒惰清理文件。
http://docs.python.org/library/os.html
In python on Linux this should not block, however try using the
os
moduleand make sure you close the file
fh.close()
as Python is a bit lazy clean up files.http://docs.python.org/library/os.html
快速建议,确保(例如,超级确定)您确实关闭了文件。
因此,请始终使用 try- except-final 块,
请记住,final 块的内容将始终被执行,这将防止您感到很多头痛:)
Quick advice, make sure (like, super sure) that you do close your file.
So ALWAYS use a try-except-final block for this
Remember that the contens of a final block will ALWAYS be executed, that will prevent you a lot of head pain :)