Асинхронный в рамках отдыха Django - PullRequest
0 голосов
/ 24 декабря 2018

Как реализовать асинхронные задачи в Django rest framework?После того, как python3.7 async.io стал частью языка python, и в него встроены сопрограммы.

Но я не могу использовать его, мне пришлось использовать celery и сервер redis для такого асинхронного поведения.


Обновление

class ReportViewSet(viewsets.ModelViewSet):

    queryset = Report.objects.all()
    serializer_class = ReportSerializer
    filter_class = ReportFilter

    def create(self, request):

        serializer = ReportSerializer(data=request.data)

        if serializer.is_valid(raise_exception=True):
            report_obj = serializer.save()
            #Start multiple tools asynchronously but we need to return the next statement without waiting for those tools to finish
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Я пытался изменить создание async function, которое запускает инструменты, но я получаю сообщение об ошибке, что вы не можете запустить эту функцию вИсполнитель это не второстепенная.Когда я пытался сделать функцию create асинхронной, она возвращает сопрограмму вместо HTTP response.Таким образом, сам django-rest-framework должен модифицировать свои внутренние устройства, чтобы они были сопутствующими типами.Любые предложения или мысли о том, как сделать то, что я упомянул, без использования MQ или методов кэширования.

1 Ответ

0 голосов
/ 25 декабря 2018

Вы не должны превращать create в асинхронную функцию.У вас должен быть цикл в create, который выполняет всю вашу логику асинхронно, но даже это не освободит рабочий процесс для обслуживания других запросов во время выполнения ваших асинхронных задач.Лучшее, что вы можете здесь сделать - это переложить задачи на сельдерея и затем опросить через другой API, чтобы проверить их статус или результат.

Django - синхронная среда, и она не будет поддерживать то, что вы пытаетесь сделать здесь,Если вы хотите проводить длительный опрос с перекрывающимися запросами, я бы посоветовал изучить торнадо

...