在我的服务器进程中,它看起来像这样:
主后端进程:
-
处理庞大的文件列表,并记录在MySQL中
-
每完成500个文件,它将"进度报告"写入一个单独的文件
/var/run/progress.log
,如"200/5000个文件完成" -
它是多进程的,有4个子进程,每个子进程确保在一个单独的文件上运行。
Web服务器进程:
- 通过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有点懒于清理文件。
快速建议,确保(比如,超级确定)你关闭了你的文件
所以对于
总是使用try-except-final块请记住,最后一个块的内容将永远被执行,这将避免你很多头痛:)