Моя проблема в том, что когда я звоню await asyncio.gather(*tasks)
, параллельные вызовы не достигают ожидаемой скорости. Есть только 30 параллельных запросов, но для запуска 20-го запроса потребуется около 10 секунд, где максимальное время ответа будет 4 секунды. Здесь я попадаю во внутреннюю конечную точку flask, которая затем вызывает внешнюю конечную точку API. Кажется, он идет параллельно, но не сразу.
Ожидаемый результат - когда я запускаю 30 запросов, это не должно занимать даже 1 секунды. Огонь все сразу.
Это внутренняя конечная точка в flask, которая будет вызывать наш внутренний метод, а этот метод будет вызывать внешний API для получения результатов. Этот метод ниже в файле маршрута. Я использую python 3.5.2 и aiohttp 2.3.10.
@car_search.route("car-detail/car-test", methods=['GET', 'POST'])
def async_zeep_call_1():
return async_zeep_call()
async def make_parallel_request(session, url, data):
async with session.post(url = url, data = data) as response:
return await response.text()
async def parallel_calls(list_of_cars):
tasks = []
async with aiohttp.ClientSession() as session:
for each_req in list_of_cars:
tasks.append(make_parallel_request(session, each_req['url'],
each_req['data']))
result_data = await asyncio.gather(*tasks)
return result_data
#Default url is internal url "car-detail/car-test"
def new_method():
url = "car-detail/car-test"
list_of_cars = []
data = {
"external_endpoint": endpoint,
"uname": uname,
"password": password
}
for item in range(30):
single_req = {'url': url, 'data': json.dumps(data), 'headers': {}}
list_of_cars.append(single_req)
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
response_list = loop.run_until_complete(parallel_calls(list_of_cars))