Рекомендованный способ использования asyncio для сервера сокетов:
import asyncio
async def handle_client(reader, writer):
request = (await reader.read(100)).decode()
response = "Data received."
writer.write(response.encode())
async def main():
loop.create_task(asyncio.start_server(handle_client, 'localhost', 15555))
loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
Это работает нормально, но теперь мне нужно получить соответствующий клиентский запрос, а затем использовать библиотеку aiohttp для получения данных от стороннего отдыха.API.
Для этого необходимо создать переменную сеанса следующим образом:
from aiohttp import ClientSession
session = ClientSession()
Но это также должно быть внутри самой сопрограммы, поэтому я помещу ее в main:
async def main():
session = ClientSession()
loop.create_task(asyncio.start_server(handle_client, '', 55555))
Теперь мне нужно передать переменную сеанса в сопрограмму get aiohttp для получения остальных данных API:
async with session.get(url, params=params) as r:
try:
return await r.json(content_type='application/json')
except aiohttp.client_exceptions.ClientResponseError:
....
Мой вопрос: как передать переменную сеанса в сопрограмму handle_client, если она настаиваеттолько наличие чтения, параметров записи и глобальных переменных не помогает мне, потому что сеансы должны существовать внутри сопрограмм?