我一直在尝试将Luigi作为我们的工作流程处理程序。目前我们正在使用concourse,但是我们试图做的很多事情都是在大厅中散步,所以我们转而使用Luigi作为依赖管理器。到目前为止没有问题,工作流程触发并正确执行。Python中的事件处理Luigi
当任务因任何原因失败时出现问题。这种情况特别是需要任务块,但所有情况都需要照顾。截至目前,Luigi优雅地处理了错误并将其写入STDOUT。它仍然会发出并退出代码0,这意味着作业已通过。假阳性。
我一直试图让事件处理来解决这个问题,但我不能让它触发,即使有一个非常简单的工作:
@luigi.Task.event_handler(luigi.Event.FAILURE)
def mourn_failure(task, exception):
with open('/root/luigi', 'a') as f:
f.write("we got the exception!") #testing in concourse image
sys.exit(luigi.retcodes.retcode().unhandled_exception)
class Test(luigi.Task):
def requires(self):
raise Exception()
return []
def run(self):
pass
def output(self):
return []
然后在Python shell中运行命令
luigi.run(main_task_cls=Test, local_scheduler=True)
异常升起,但偶不发生或什么。 该文件不被写入和退出代码仍为0
而且,如果它使在其中包含
[retcode]
already_running=10
missing_data=20
not_run=25
task_failed=30
scheduling_error=35
unhandled_exception=40
/etc/luigi/client.cfg的差异,我有我路易吉配置我不知道为什么事件处理程序不会触发,但不知何故,我需要该过程在发生错误时失败。
嗯我不太确定如何使用luigi,但基本上,当测试失败时,您将需要一个非零的退出代码... 大厅事件流程非常简单。 1.运行您的task.yml中指定的脚本 2.根据脚本的退出代码转为绿色或红色 –