Почему поле сессии не удаляется в событии django Server sent?
class task_check(AuthententicatedOrReadOnlyAPIView):
content_negotiation_class = IgnoreClientContentNegotiation
def get(self, request):
timeout = int(request.query_params.get('timeout', 300))
task_id = request.session.get('pending_task_id')
if not task_id:
return HttpResponse("No pending task", status=404)
def event_stream():
start_time = time.time()
while True:
if time.time() - start_time > timeout:
del request.session['pending_task_id']
request.session.modified = True
yield f"data: {json.dumps({'status': 'TIMEOUT'})}\n\n"
break
event_task_id = request.session.get('pending_task_id')
if not event_task_id:
yield f"data: {json.dumps({'status': 'TIMEOUT'})}\n\n"
task = AsyncResult(event_task_id)
if task.ready():
del request.session['pending_task_id']
request.session.modified = True
yield f"data: {json.dumps({'status': 'DONE'})}\n\n"
break
else:
yield f"data: {json.dumps({'status': 'PENDING'})}\n\n"
time.sleep(5) # Check every 5 seconds
response = StreamingHttpResponse(event_stream(), content_type='text/event-stream')
response['Cache-Control'] = 'no-cache'
response['X-Accel-Buffering'] = 'no'
return response
Теперь этот код внутри event_stream по какой-то причине не удаляет pending_task_id, эти строки выполняются в соответствии с логикой без ошибок и предупреждений, но при следующем вызове get из task_check поле сессии pending_task id остается таким, какое оно есть