Python:如何写入文件并持续监控其文件大小变化?
我有一个Python脚本,其中有一个方法叫做 produce_output(input)
,这个方法会在运行一个很长的过程后生成一个输出文件,但这个过程需要多长时间是很难预测的。有时候,这个过程会卡住(可能是因为内存问题或者输入不正确)。
在同一个脚本里,我想创建一个方法 has_output_changed()
,这个方法会监控输出文件的大小变化。如果文件大小在超过5分钟内没有变化,我们就会终止 produce_output()
方法,并退出脚本。
我该怎么实现这个呢?
这个 produce_output(input)
是一个Celery任务,会被执行。我希望这个任务能够自我监控它生成的输出文件的大小,当它发现自己没有在工作时(比如因为某个过程卡住了,导致输入转化为输出的过程停滞),就自动结束自己(例如:内存泄漏、输入不正确、资源不足)。
1 个回答
1
假设只有这个脚本在往文件里写东西,你可以简单地监控自从上次写入文件以来的时间:
import signal, time
# Set time limit to 5 minutes.
time_limit = 300
class TimeoutException(Exception):
pass
# Create signal countdown.
def signal_handler(signum, frame):
raise TimeoutException("Idle for too long! Exit!")
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(time_limit)
# Reset signal countdown every time to write to file.
def print_to_file(msg):
print(msg) #or other writing method.
signal.alarm(time_limit)
try:
# Do your stuff here, for example:
print_to_file('a')
time.sleep(time_limit + 1)
except TimeoutException, msg:
# Nothing happened for 5 minutes!
print msg
else:
signal.alarm(0)