답변이 필요한 질문은 다음과 같습니다. C가 언제 실행해야하는지 어떻게 알 수 있습니까? A와 B는 언제 달릴 지 어떻게 알 수 있습니까? 이것이 Luigi 과제의 requires
방법으로 들어가는 것입니다. Luigi 모델은 각 일괄 작업이 의존하는 작업의 완료에 따라 실행할시기를 결정하는 끌어 당기는 모델입니다. 당신이 보여 단순한 모델에서
(그것은 C
에 "아래로 흐르는"A
또는 B
생각하는 데 도움이되지 않음), C
는 파이프 라인의 발사 작업입니다. C
이로드되고 (run
은 호출하지 않음) A
및 B
이 완료되었는지 확인하십시오. 둘 중 하나라도 완료되지 않으면 서브 세트가 실행될 것입니다. 이미 완료되었거나 완료되면 C
은 run
으로 전화 할 것입니다. A
작업과 B
작업 만 조건부로 수행해야하는 경우 수행 할 작업이없는 경우 해당 complete
메서드는 True
을 반환 할 수 있습니다. C
은 run
이 될 수 있습니다.
그러나이 문제가 귀하의 특별한 문제인지 확신 할 수 없습니다. 아마도 C
을 A
및 C
에 대해 한 번 실행하여 B
에 대해 한 번만 실행하려고 할 것입니다. 이런 종류의 시나리오에서 나는 대체로 run
메서드를 C
으로 작성하여 디렉토리의 파일, 상태 데이터베이스의 행 또는 다른 참조 목록에 상관없이 임의의 입력 목록에 대해 작업 할 수 있습니다. 그러나 이런 경우에는 C
에 의해 제공되는 후 처리 단계를 추가하는 Task의 하위 클래스를 정의하여및 B
에 대한 정의에 C
이 무엇이든지 추가하는 것이 더 나을 때가 있습니다.
어떤 경우라도 파이프 라인을 실행하는 데는 여러 가지 방법이 있지만 설명하는 추상화 수준에서 좋은 대안을 제안하는 것은 어렵습니다. 나는 당신의 생각을 풀 모델로 바꾸는 것이 아마도 그것들을 찾는 첫 걸음이라고 생각합니다.
[루이지의 동적 종속성] (http://luigi.readthedocs.io/en/stable/tasks.html#dynamic- dependencies) (여기에 [예제] (https://github.com/)가 있습니다. spotify/luigi/blob/master/examples/dynamic_requirements.py)). 그 외에도 문제를 해결하기 위해 Luigi 작업을 어떻게 작성했는지 조금 더 설명해야합니다. – matagus
나는 그 예를 보았지만 나의 문제 상황에도 잘 맞지 않는다. 개별 작업의 경우 임의의 수의 입력을 사용할 수 있지만 다른 작업 또는 수를 모를 수 있습니다. 모든 것이 중요합니다. 지금까지 필자는 SciLuigi 및 다른 프레임 워크로 어떤 것이 효과가 있는지 알아 보았습니다. 그들 중 어느 누구도 루이지의 사용 용이성과 일치하지 않습니다. 팩토리에서 생성 된 특별한 태스크를위한 서브 클래스를 만드는 것을 보았습니다. 특별한'run()'메소드는 대신 동작을 수행 할 것입니다. 잘 모르겠다면 ... –