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

发布于 2024-11-04 20:57:18 字数 482 浏览 5 评论 0原文

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

主要后端进程:

  1. 处理大量文件 和 ,将它们记录在 MySQL 中。

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

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

Web服务器进程:

  1. 通过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:

  1. Processes Huge list of files and , record them inside MySQL.

  2. On every 500 files done, it writes "Progress Report" to a separate file /var/run/progress.log like this "200/5000 files done"

  3. It is multi-processed with 4 children, each made sure to run on a separate file.

Web server process:

  1. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音栖息无 2024-11-11 20:57:18

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

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

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

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

In python on Linux this should not block, however try using the os module

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

and make sure you close the file fh.close() as Python is a bit lazy clean up files.

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

阳光下慵懒的猫 2024-11-11 20:57:18

快速建议,确保(例如,超级确定)您确实关闭了文件。

因此,请始终使用 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 :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文