Блокирует ли httpsstreamingresponse поток? или Сколько клиентов разрешено в одном потоке?

Я реализовал базовое событие отправки сервера в django с помощью httpsstreamingresponse, который каждые 5 секунд отправляет ответ!

class task_status_stream(AuthententicatedOrReadOnlyAPIView):
    # to respond as text/event-stream we need to ignore exisiting Client Content negotiation
    content_negotiation_class = IgnoreClientContentNegotiation



 # sending pf creation status to as StreamingHttpResponse
    def get(self, request):
        timeout = int(request.query_params.get('timeout', 300))

        def event_stream():
            start_time = time.time()
            try:
                while True:
                    if time.time() - start_time > timeout:
                        yield f"data: {json.dumps({'status': 'TIMEOUT'})}\n\n"
                        break
                    task = AsyncResult(task_id)
                    if task.ready():
                       yield f"data: {json.dumps({'status': 'DONE'})}\n\n" # noqa W503
                        break
                    else:
                        yield f"data: {json.dumps({'status': 'PENDING'})}\n\n"
                    time.sleep(5)  # Check every 5 seconds
            except Exception as e:
                logger.error(f"Error during streaming: {e}")
                yield f"data: {json.dumps({'status': 'ERROR', 'message': str(e)})}\n\n"
            finally:
                logger.info("Ending the streaming response")

        response = StreamingHttpResponse(event_stream(), content_type='text/event-stream')
        response['Cache-Control'] = 'no-cache'
        response['X-Accel-Buffering'] = 'no'
        return response

теперь эта реализация будет блокировать поток или блокировать порт до тех пор, пока поток событий не будет закрыт со стороны клиента? Или она будет продолжать выполняться в течение 300 секунд по таймауту!

также еще один вопрос: сколько пользователей одновременно могут запускать этот потоковый ответ, используя один поток, и как увеличить этот лимит?

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