MCPcopy
hub / github.com/benoitc/gunicorn / _stream_async_generator

Method _stream_async_generator

gunicorn/dirty/worker.py:417–448  ·  view source on GitHub ↗

Stream chunks from an asynchronous generator. Args: request_id: Request ID for the messages gen: Async generator to iterate writer: StreamWriter for sending messages

(self, request_id, gen, writer)

Source from the content-addressed store, hash-verified

415 gen.close()
416
417 async def _stream_async_generator(self, request_id, gen, writer):
418 """
419 Stream chunks from an asynchronous generator.
420
421 Args:
422 request_id: Request ID for the messages
423 gen: Async generator to iterate
424 writer: StreamWriter for sending messages
425 """
426 try:
427 async for chunk in gen:
428 # Send chunk message
429 await DirtyProtocol.write_message_async(
430 writer, make_chunk_message(request_id, chunk)
431 )
432 # Update heartbeat during long streams
433 self.notify()
434 # Send end message
435 await DirtyProtocol.write_message_async(
436 writer, make_end_message(request_id)
437 )
438 except Exception as e:
439 # Error during streaming - send error message
440 tb = traceback.format_exc()
441 self.log.error("Error during streaming: %s\n%s", e, tb)
442 response = make_error_response(
443 request_id,
444 DirtyAppError(str(e), traceback=tb)
445 )
446 await DirtyProtocol.write_message_async(writer, response)
447 finally:
448 await gen.aclose()
449
450 async def execute(self, app_path, action, args, kwargs):
451 """

Callers 1

handle_requestMethod · 0.95

Calls 7

notifyMethod · 0.95
make_chunk_messageFunction · 0.85
make_end_messageFunction · 0.85
DirtyAppErrorClass · 0.85
make_error_responseFunction · 0.70
write_message_asyncMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected