我一直在嘗試將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.根據腳本的退出代碼轉爲綠色或紅色 –