Множественный вызов функции в асинхронном режиме

Я хочу вызвать функцию много раз с разными параметрами, до те хо пор пока эти параметры не закончатся. И всё это в асинхронном режиме, чтобы пока одна версия ожидала ответа успела запуститься другая. собственно код того, как я это представляю

import asyncio

async def get(params): # запрос данных по параметрам
    await asyncio.sleep(1)

def process(object): # функция для обработки полученных данных
    pass

async def do_the_job(params): # получить и обработать запрос
    obj = await get(params)
    process(obj)

async def do_all_jobs(loop, params_list):
    for parmas in params_list:
        task = loop.create_task(do_the_job(params))
        task

def run(params_list):
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_all_jobs(loop, params_list))
    loop.close()

run([1,2,3,4])

Проблема в том что задачи вызываются и обрываются на await get(), где задержка, так как сама задача(do_all jobs), создать задания, уже выполнена, и она не дожидается окончания заданий.

Дополнение: Дело не в синтаксисе, Нашел способ делать это без loop и чтобы оно выполнялось асинхронно, но выглядит так будто я делаю что то не так...

async def do_all_jobs(loop, params_list):
    tasks = []
    for params in params_list:
        task = asyncio.create_task(do_the_job(params))
        tasks.append(task)
    for t in tasks:
        await t

Ответы (1 шт):

Автор решения: eri
for t in tasks:
    await t

Замени на

await asyncio.gather(*tasks)

Он аваитит их все разом, а не в порядке массива как for. И в этом случае не нужно делать таски - их сделает gather

for params in params_list: 
    tasks.append(do_the_job(params))

Однострочник заменяющий do_all_jobs полностью

await asyncio.gather(*map(do_the_job,params_list))
→ Ссылка