Завершение (отмена) задачи Celery в пуле эвентов
Я переключил пул префорков на eventlet. В моем случае метод завершения не работает и выдает такую ошибку:
django.db.utils.DatabaseError: Объекты DatabaseWrapper, созданные в потоке, могут быть использованы только в этом же потоке. Объект с псевдонимом 'default' был создан в потоке с идентификатором 139661231139648, а это поток с идентификатором 139661089517376.
Использование django-db в качестве бэкенда результатов. Метод завершения:
def terminate(self):
"""
Terminate a service with bot_code
"""
task_name = f"{self.bot_code}_instance"
try:
task = PeriodicTask.objects.get(name=task_name)
task.enabled = False
task.save()
celery_task_id = TaskController.get_celery_task_id_by(search_field="task_name",
search_value=task.task, status="STARTED")
if celery_task_id:
current_app.control.revoke(celery_task_id, terminate=True)
return Response({'message': 'Task terminated successfully.'}, status=status.HTTP_200_OK)
except PeriodicTask.DoesNotExist:
return Response({'error': 'Task does not exist.'}, status=status.HTTP_404_NOT_FOUND)