【发布时间】:2023-03-07 19:44:01
【问题描述】:
我正在通过 django 的 celery(版本 2.3.2)作为任务运行多个模拟。模拟由另一个任务设置:
在views.py中:
result = setup_simulations.delay(parameters)
request.session['sim'] = result.task_id # Store main task id
在tasks.py中:
@task(priority=1)
def setup_simulations(parameters):
task_ids = []
for i in range(number_of_simulations):
result = run_simulation.delay(other_parameters)
task_ids.append(result.task_id)
return task_ids
初始任务(setup_simulations)完成后,我尝试如下撤销模拟任务:
main_task_id = request.session['sim']
main_result = AsyncResult(main_task_id)
# Revoke sub tasks
from celery.task.control import revoke
for sub_task_id in main_result.get():
sub_result = AsyncResult(sub_task_id); sub_result.revoke() # Does not work
# revoke(sub_task_id) # Does not work neither
当我查看“python manage.py celeryd -l info”的输出时,任务被执行,就好像什么都没发生一样。任何可能出错的想法?
【问题讨论】:
-
问题是否取决于我使用 Kombu 作为经纪人这一事实? (这些“虚拟传输”可能具有有限的广播和事件功能。例如,远程控制命令仅适用于 AMQP 和 Redis。)