Django StreamingHttpResponse с предупреждением о настройке asgi

Здравствуйте, я использую следующее представление на основе класса для определения конечной точки для возврата большого набора Django Queryset в виде Json или CSV с использованием потокового ответа

class DataView(viewsets.ReadOnlyModelViewSet):
    permission_classes = [IsAuthenticated, StrictDjangoModelPermissions]
    authentication_classes = [JWTAuthentication]
    queryset = Data.objects.all()
    serializer_class = DataSerializer
    pagination_class = LimitOffsetPagination
    filter_backends = (DjangoFilterBackend,SearchFilter)
    filterset_class  = DataFilter
    search_fields = ['^ts']

    def generate_data(self, start, end, needCSV, points):
        cols = ['ts', 'topic_id', 'value_string']
        if len(points) > 0:
            data = Data.objects.filter(ts__range=(start, end), topic_id__in=points)
        else:
            data = Data.objects.filter(ts__range=(start, end))
        dis_dict = {point.id: point.navPoint for point in Points.objects.filter(id__in=points)}
        if needCSV:
            yield ','.join(cols + ['dis']) + '\n' 
            for row in data:
                dis_value = dis_dict.get(row.topic_id, '')
                yield ','.join(map(str, [getattr(row, col) for col in cols] + [dis_value])) + '\n'
        else:
            yield '['
            for i, row in enumerate(data):
                if i > 0:
                    yield ','
                dis_value = dis_dict.get(row.topic_id, '')
                row_dict = {col: str(getattr(row, col)) for col in cols}
                row_dict['dis'] = dis_value
                yield json.dumps(row_dict)
            yield ']'

    def list(self, request, *args, **kwargs):
        try:
            csv = request.GET.get('csv', False)
            csv = csv and csv.lower() == 'true'

            points = request.GET.getlist('point', [])
            start = request.GET['start']
            end = request.GET['end']

            contentType = 'text/csv' if csv else 'application/json'
            fileName = 'data.csv' if csv else 'data.json'
            response = StreamingHttpResponse(self.generate_data(start, end, csv, points), content_type=contentType)
            response['Content-Disposition'] = f'attachment; filename="{fileName}"'
            return response
        except Exception as e:
            return Response({ "status": False, "message": str(e) })

Код отлично работает, когда я тестирую его с помощью команды py manage.py runserver

Но когда я запускаю это в производстве, используя uvicorn project.asgi:application --port 8000

Выдает следующее предупреждение

C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\django\http\response.py:517: Warning: StreamingHttpResponse must consume synchronous iterators in order to serve them asynchronously. Use an asynchronous iterator instead.
  warnings.warn(

Обратите внимание на то, что при использовании runserver ответ действительно транслируется, строка за строкой, но при использовании uvicorn он внезапно возвращает весь ответ, например, yield не работает должным образом.

Я использую Django 5, и мой вопрос прост - как я могу избавиться от предупреждения?

Шаги, которые я уже предпринял, чтобы решить проблему, но не смог

  1. Преобразовали функцию generate_data из sync в async (Ошибка)
  2. Преобразовали функцию def list() в async (Ошибка)
  3. Попытались использовать служебную функцию sync_to_async (Ошибка)
Вернуться на верх