我正在尝试从Django管理面板停止Celery任务。我有一个名为TaskModel的模型,它包含一个task_id,并且我在TaskModelAdmin中创建了一个自定义操作,以在任务执行期间停止任务。
下面是我的TaskModel:
class TaskModel(models.Model):
task_id = models.CharField(max_length=50, blank=False)
def stop(self):
try:
celery.control.revoke(self.task_id, terminate=True, signal='SIGKILL')
return "Task stopped"
except Exception as e:
return "Error"
下面是我的TaskModelAdmin的相关部分:
class TaskModelAdmin(admin.ModelAdmin):
@admin.action()
def stop_tasks(modeladmin, request, queryset):
for task in queryset.all():
task.stop()
我在Celery文档中读到,我可以使用带有terminate=True标志的revoke方法来停止任务,但它似乎不起作用,任务成功完成。
有谁能帮助我理解为什么这种方法不能像预期的那样工作,并建议一个解决方案来停止Django管理面板中的Celery任务?
谢谢你,谢谢!
1条答案
按热度按时间6jjcrrmo1#
我不能模拟你的问题,但可以提出两个重要的观点:
1.celery 文档说你应该先用-A标志开始celery 。
celery -A proj worker -l INFO
1.在文档中,每个
revoke()
方法都从app.control
调用,而不是从celery
库本身调用。所以你应该改变这一行:到这一行:
我希望这能解决你的问题。