2017-02-28 12 views
2

저는 루이지를 워크 플로우 처리기로 통합하려고했습니다. 현재 우리는 콩 코스를 사용하고 있습니다. 그러나 우리가하려고하는 많은 것들이 콩 코스에서 돌아 다니는 번거 로움 때문에 우리는 루이지를 의존성 관리자로 전환했습니다. 지금까지 문제는 없지만 워크 플로가 올바르게 실행되고 실행됩니다.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

입니다 이벤트 처리기가 트리거되지 않는 이유는 무엇입니까?하지만 어떻게 든 오류가 발생하면 프로세스가 실패해야합니다.

+0

나는 luigi를 사용하는 방법에 대해 너무 확신하지는 않지만 기본적으로 테스트가 실패하면 기본적으로 0이 아닌 종료 코드가 필요합니다. Concourse 이벤트 흐름은 매우 간단합니다. 1. task.yml에 지정된 스크립트를 실행하십시오. 2. 스크립트의 종료 코드를 기준으로 녹색 또는 빨간색으로 이동하십시오 –

답변

0

"예외 발생"호출을 배치하는 것이 문제인 것처럼 보입니다. requires 기능에 배치하면 기본적으로 테스트 작업 실행 방법보다 먼저 실행됩니다. 따라서 테스트 작업이 실패한 것처럼 진행되지는 않지만 그것이 의존하는 작업 (지금은 비어 있음 ...)입니다.

예를 들어 레이즈를 실행하면 코드가 예상대로 동작합니다. luigi.Event.BROKEN_TASK을 : 당신의 의존성이 실패 할 경우

def run(self): 
     print('start') 
     raise Exception() 

당신은 루이지 이벤트 핸들러, BROKEN_TASK의 다른 유형을 추가 할 수 있습니다합니다 (이 방법을 필요로이 경우, 예외가 발생) 사건을 처리합니다. 이렇게하면 luigi 코드가 예상 한 리턴 코드 (0이 아닌)를 내보내는 지 확인합니다.

건배!

0

올바르게 이해한다면, 태스크가 실패 할 때 luigi가 오류 코드를 리턴하게하고,이 문제에 많은 문제가 있었지만, 매우 간단하다는 것이 밝혀졌습니다. 단지 luigi로 실행해야합니다. 명령 줄이 아니라 파이썬. 이처럼 :

luigi --module my_module MyTask

그 다음이 문제가 너무 있었다면 나도 몰라,하지만 난 파이썬 실행되었으며,이 luigi.cfg에 retcodes을 무시 루이지. 희망이 도움이됩니다.