Блокирует ли 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 секунд по таймауту!
также еще один вопрос: сколько пользователей одновременно могут запускать этот потоковый ответ, используя один поток, и как увеличить этот лимит?