Я создаю сервер приложений ASGI на python и реализую протокол HTTP / 2. Я получаю необработанные байты из сокета, анализирую байты и преобразую их в объекты кадра. Когда я запускаю приложение ASGI, вызываемый метод send получает только событие dict в качестве параметра, который не содержит идентификатор потока. Поскольку я использую async / await, мой сервер может обрабатывать несколько потоков одновременно. Как узнать, какой идентификатор потока связан с какой вызываемой отправкой?
class Server(object):
async def send_response(self, event):
# event dict does not contain stream id
if event["type"] == "http.response.start":
# Need stream id here to create http2 frames
...
elif event["type"] == "http.response.body":
# Need stream id here to create http2 frames
...
async def handle_request(self):
try:
while True:
self.request_data = self.client_connection.recv(4096)
self.frame = self.parse_request(self.request_data)
if isinstance(self.frame, HeadersFrame):
# stream id is available here as self.frame.stream_id
if self.frame.end_stream:
asgi_scope = self.get_asgi_event_dict(self.frame)
self.asgi_app = self.application(asgi_scope)
await self.asgi_app(self.trigger_asgi_application, self.send_response)
Я хочу получить идентификатор потока в функции send_response.