가 나는 레디 스 브로커와 백엔드와 다음 설정을 사용하여 화음의 모든 작업을 취소 :셀러리 : 중단 또는
chord([A, A, A, ...])(B)
- 작업 A는 몇 가지 검사를 수행합니다.
AbortableTask
을 기본으로 사용하고task.is_aborted()
플래그를 정기적으로 확인합니다. - 태스크 B가 계산
사용자는 A가 작업을 중단 할 가능성이 결과에 대해 사용자에게 통지한다. 아쉽게도 모든 작업 A 인스턴스에서 AbortableAsyncResult(task_a_id).abort()
을 호출하면 활성 인스턴스 만 중단됩니다. 아직 작업자가받지 못한 작업의 상태는 ABORTED
으로 변경되지만 여전히 처리되며 is_aborted()
플래그는 False를 반환합니다.
당연히 대신에 보류중인 작업을 수행 할 수도 있지만 문제는 그 코드 바디 (작업 B)가 더 이상 실행되지 않는다는 것입니다.
보류중인 실행중인 작업 A 인스턴스를 중지하고 B 작업을 계속 실행하려면 어떻게해야합니까?
흥미로운 해킹처럼 들리지만 모든 것을 더 복잡하게 만듭니다. 나는 이것을 달성하기 위해 셀러리에 내장 된 방법이 있다는 것을 희망합니다. –
그래서 문제는 샐러리가 작동하는 방식입니다. 작업이 대기열에 있고 취소되지 않는 한 "활성"상태입니다. 내 지식으로는이 문제를 해결할 방법이 없습니다. 작업이 취소 된 경우에도 체인을 연결하는 코드가 필요합니다. 다시는 내 지식으로는 불가능합니다. – user2097159
AbortableTasks (contrib 패키지로부터) *는 중단 가능합니다 (콜백을 죽이지 않고). 문제는 보류중인 태스크가 아니라 실행중인 태스크에서만 작동한다는 것입니다. –