그래서 작업 디렉토리를 만들고 모든 작업을 수행합니다. 작업이 서버 A에서 호출되고 작업자 서버에서 실행됩니다.task_revoked 처리기의 샐러리 작업 ID
일단 작업이 완료되면/이 취소되었음을 확인해야합니다..
나는 작업 취소 처리기를 추가는 다음과 같습니다@task
def my_task(value):
task_id = current_task.request.id
work_dir = os.path.join(BASE_WORK_DIR, task_id)
os.makedirs(work_dir)
try:
# Do work...
finally:
shutil.rmtree(work_dir)
@task_revoked.connect(sender=my_task)
def my_task_revoked_handler(*args, **kwargs):
# FIXME: delete work_dir
print args
#()
print kwargs
# {'terminated': True, 'signal': <Signal: Signal>, 'expired': False, 'sender': <@task: myapp.core.tasks.my_task>, 'signum': '15'}
내 문제는 서버 A가 작업을 취소 할 때 아무튼 이후로는 취소 처리기에서 작업 디렉토리의 정리를 발행 할 수 없다 task_id가 없습니다.
이 특정 신호 처리기에서 작업 ID를 가져 오는 방법이 있습니까? 일부 other Signals이 신호를 가지고 있는데, 나는이 신호가 어디에서 발령되었는지 소스를보고, 어떤 이유로이 신호는 task_id와 함께 제공되지 않습니다.
제공된 sender
작업에는 trace_task 함수가 포함되어 있습니다. {'__trace__': <function trace_task at 0x3ee8230>}
하지만 함수 자체에 task_id가 필요하므로 어떻게 사용할 수 있는지 알 수 없습니다.
다른 아이디어를 환영합니다.
내가 생각하기에 = – JayLev