저는 루이지를 워크 플로우 처리기로 통합하려고했습니다. 현재 우리는 콩 코스를 사용하고 있습니다. 그러나 우리가하려고하는 많은 것들이 콩 코스에서 돌아 다니는 번거 로움 때문에 우리는 루이지를 의존성 관리자로 전환했습니다. 지금까지 문제는 없지만 워크 플로가 올바르게 실행되고 실행됩니다.Python에서의 이벤트 처리 Luigi
어떤 이유로 든 작업이 실패하면 문제가 발생합니다. 이 경우에는 특별히 작업 블록이 필요하지만 모든 사례는 처리해야합니다. 지금 루이지는 정상적으로 오류를 처리하고 그것을 STDOUT에 기록합니다. 그래도 코드 0을 내보내고 코드 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 []
그런 다음 파이썬 쉘에서 명령을 실행
luigi.run(main_task_cls=Test, local_scheduler=True)
예외는 발생하지만 예외는 발생하지 않습니다. 파일이 작성되지 않으며이
[retcode]
already_running=10
missing_data=20
not_run=25
task_failed=30
scheduling_error=35
unhandled_exception=40
을 포함 /etc/luigi/client.cfg에서 내 루이지의 구성이 차이가 있는지 종료 코드는 또한 여전히 0
입니다 이벤트 처리기가 트리거되지 않는 이유는 무엇입니까?하지만 어떻게 든 오류가 발생하면 프로세스가 실패해야합니다.
나는 luigi를 사용하는 방법에 대해 너무 확신하지는 않지만 기본적으로 테스트가 실패하면 기본적으로 0이 아닌 종료 코드가 필요합니다. Concourse 이벤트 흐름은 매우 간단합니다. 1. task.yml에 지정된 스크립트를 실행하십시오. 2. 스크립트의 종료 코드를 기준으로 녹색 또는 빨간색으로 이동하십시오 –