Вызов синхронной функции асинхронно в django-graphene mutation

Моя мутация содержит функцию, которая вызывает API для отправки SMS. Поскольку выполнение этой функции может занять некоторое время, а ее результат не имеет никакого отношения к тому, что возвращает мутация (Его не нужно отправлять обратно клиенту), я предпочитаю запускать ее асинхронно. Чтобы мутация выполнялась как можно быстрее.

Вот мой код:

class MyMutation(graphene.Mutation):
    class Arguments:
        phone = graphene.String(required=True)

    success = graphene.Boolean()

    @classmethod
    def mutate(cls, root, info, phone):
        ...
        ...
        myfunction() #The client should not wait for this function's execution. 
        return MyMutation(success=True)

примечание: myfunction НЕ является asyncфункцией. И я предпочитаю оставить это так.

Я не смог найти правильный способ сделать это в документации django-graphene.

Для запуска асинхронной функции необходимо использовать другие методы, вы можете использовать любой из следующих:

  • django-background-tasks: Простой и не требует рабочего
  • .
  • python-rq: Отлично подходит для простых асинхронных задач
  • .
  • celery: Более полное решение
  • .

Спасибо за ваш ответ. Я хотел узнать, есть ли какой-нибудь другой способ, кроме использования пакетов типа celery, как вы упомянули.

Итак, я установил celery с redis и сделал несколько начальных конфигураций. Я объявил myfunction в файле tasks.py и вызвал ее из мутации:

from .tasks import myfunction
class MyMutation(graphene.Mutation):
    class Arguments:
        phone = graphene.String(required=True)

    success = graphene.Boolean()

    @classmethod
    def mutate(cls, root, info, phone):
        ...
        ...
        myfunction().delay() #now this function is called asynchronously 
        return MyMutation(success=True)

Все работает гладко.

Вернуться на верх