2013-08-12 2 views
1

send_async_fax이라는 셀러리 작업이 있고 send_notifications이라는 셀러리 작업이 있습니다. send_async_fax을 직접 호출 할 수 있습니다. 그러나 send_notifications으로 전화하면 send_async_fax도 호출됩니다.다른 셀러리 작업에서 셀러리 작업 호출

send_async_fax은 많은 인수 중 하나가 file 개체 목록입니다. send_async_fax에 직접 전화하면 모든 것이 계획대로 진행됩니다. 그러나 간접적으로 호출 할 때 send_notifications을 통해 유효한 열린 파일 목록이 초기화되지 않은 파일 목록으로 저하됩니다.

실례로 send_notificationssend_async_fax.delay이 호출되었을 때 팩스를 보내기위한 별도의 비동기 작업을 생성한다는 것이 었습니다 (당연히 말이죠). 그러나 이렇게하면 파일 참조가 엉망이되거나 send_async_fax이 실제로 작동하기 전에 send_notifications이 파일을 닫고있는 것으로 의심됩니다.

는 I는 delay 기능을 사용하지 않고 send_notificationssend_async_fax 호출 노력이 직감을 테스트하는 ((send_async_fax.delay 대신으로), 즉 send_async_fax (* * 인수를 인수)). 그것은 아무것도 바뀌지 않았습니다. 그런 다음 send_async_fax의 장식자인 task을 주석 처리하여 정규 기능으로 만들었습니다. 이 경우 모든 것이 예상대로 작동합니다.

이 작업을 수행하려면 명백한 해결책은 동기식 버전의 팩스 기능을 만들어서 비동기 버전 대신 셀러리 작업에서 호출 할 때 사용하는 것입니다. 그러나 나는 이것보다 더 우아한 해결책이 있기를 바라고 있습니다. 당신의 도움을 주셔서 감사합니다.

  • 셀러리 == 3.0.19
  • 장고 - 셀러리 == 3.0.17

답변

0

나는 그것이 지연 작업에 대한 인수로 열려있는 파일을 직렬화하려고 함께 할 수있는 뭔가가 내기.

send_async_fax 함수에 입력 매개 변수로 fullpath 파일 이름을 보내고 send_async_fax에서 파일을여십시오.

나는 또 다른 호출 한 작업의 여기 예를 넣어 :

https://github.com/brentpayne/django-celery-example/blob/master/polls/tasks.py

https://github.com/brentpayne/django-celery-example/blob/master/polls/management/commands/one_task_calls_another.py

을하지만 당신은 같은 뭔가 더 작업을 수행 할 수 있습니다 : (

그룹 (send_async_fax.map my_list_to_fax를)) .delay()