路易吉:在例外情况下强制删除文件

时间:2019-01-27 14:03:32

标签: python luigi

在Luigi中,我了解到要确定某个依赖项是否已成功完成,工作人员会检查该依赖项应生成的文件是否存在。

但是,如果任务在创建文件之后但在完成该任务之前引发异常,该怎么办?在那种情况下,任务没有完成应有的工作,但是在下一次运行时,磁盘上将存在一个文件,该文件将向工作人员指示任务已完成。

问题:如何更改此行为?如果我有一个长时间运行的任务,但失败,但异常,我想删除它开始创建的文件。我是否只将整个run()包装在try/except中?还是在Luigi中有更优雅的方法来做到这一点?

更新:

因此,在得到SO答复之前,我将以丑陋的方式进行操作,但实际上,我的丑陋的“解决方案”实际上不起作用。如果我尝试:

def run(self):
    try:
        my_stuff(self.my_arguments)
    except Exception as e:
        os.remove(self.output().path)
        raise e

我明白了:

During handling of the above exception, another exception occurred:
( ... )
OSError: [Errno 26] Text file busy: '/path/my_big_file.db'
INFO: Informed scheduler that task   _MyTask_a50a5eb8eb   has status   FAILED

更新:

令人惊讶的是,这不起作用:

try:
    with sqlite3.connection(self.output().path) as connection:
        my_long_task(connection, other_params)
except KeyboardInterrupt as e:
    os.remove(self.output().path)
    raise e

我遇到了同样的问题(文件忙)。

0 个答案:

没有答案