Я хотел бы добавить асин * c код в мой проект Python, чтобы сделать часть запроса http асинхронной. например, я читаю параметры из Kafka, использую эти параметры для генерации некоторых URL-адресов и помещаю их в список. если длина списка больше 1000, то я отправляю этот список в aiohttp для пакетного получения ответа.
Я не могу изменить весь проект с syn c на asyn c, поэтому я может изменить только часть http-запроса.
пример кода:
async def async_request(url):
async with aiohttp.ClientSession() as client:
resp = await client.get(url)
result = await resp.json()
return result
async def do_batch_request(url_list, result):
task_list = []
for url in url_list:
task = asyncio.create_task(async_request(url))
task_list.append(task)
batch_response = asyncio.gather(*task_list)
result.extend(batch_response)
def batch_request(url_list):
batch_response = []
asyncio.run(do_batch_request(url_list, batch_response))
return batch_response
url_list = []
for msg in kafka_consumer:
url = msg['url']
url_list.append(url)
if len(url_list) >= 1000:
batch_response = batch_request(url_list)
parse(batch_response)
....
Как мы знаем, asyncio.run
создаст четный l oop для запуска асинхронной c функции, а затем закройте четное l oop. Моя проблема в том, повлияет ли мой метод на производительность кода asyn c? А у тебя есть какой-нибудь способ лучше для моей ситуации?