Python 任务处理程序中的芹菜任务id
所以我有一个任务,创建一个工作目录,并在那里完成所有工作。 任务从服务器A调用,并在工作服务器上执行 我需要确保任务完成后删除工作目录/取消 我添加了一个任务撤销处理程序,如下所示:Python 任务处理程序中的芹菜任务id,python,django,celery,djcelery,Python,Django,Celery,Djcelery,所以我有一个任务,创建一个工作目录,并在那里完成所有工作。 任务从服务器A调用,并在工作服务器上执行 我需要确保任务完成后删除工作目录/取消 我添加了一个任务撤销处理程序,如下所示: @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:
@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'}
@任务
定义我的任务(值):
task\u id=当前的\u task.request.id
work\u dir=os.path.join(基本\u工作\u dir,任务\u id)
os.makedirs(工作目录)
尝试:
#做工作。。。
最后:
shutil.rmtree(工作目录)
@任务\u已撤销。连接(发件人=我的任务)
定义我的任务处理程序(*args,**kwargs):
#修正:删除工作目录
打印参数
# ()
打印kwargs
#{'terminated':True,'signal':,'expired':False,'sender':,'signum':'15'}
我的问题是,当服务器A取消任务时,我无法对已撤销处理程序中的工作目录进行清理,因为它没有任务id
有没有办法从这个特定的信号处理程序获取任务id?
有些人有它们,我查看了它们发出的来源,出于某种原因,这个信号没有提供任务id
提供的sender
任务包含一个trace\u任务函数:{'''u trace\u\u':}
,但我看不出如何使用它,因为函数本身需要一个任务id
任何其他想法都是受欢迎的。我认为这里发生的事情是,您使用的是一个旧版本的芹菜,它不支持第一个“请求”论点 增加这一点的上游问题是[1];在此之前,我认为你运气不好,很遗憾,没有办法获得任务id
[1] 我想迟做总比不做强=)