Асинхронная работа с изображениями Python

Задача: Пишу ТГ бота с использованием Aiogram. Пользователь отправляет группу изображений, далее изображения в асинхронном режиме загружаются на диск. Далее запускается цикл обработки изображений, после завершения которого, они должны быть отправлены обратно пользователю.

Проблема: Очевидно при текущем подходе не все изображения будут обработаны, т.к. функция обработки не асинхронная. Прошу сориентировать\показать какие способы решения этой проблемы возможны. Благодарю!

п.с. я совсем новичок, поэтому по возможности, прошу объяснить как можно проще.

п.с.с. код - если нужно:

async def get_file(msg: types.Message):
    path_drd = 'data/received_data'
    path_dcg = 'data/changed_groups'
    user_id = msg.from_user.id
    create_folder(path_drd, user_id)
    create_folder(path_dcg, user_id)
    # функции выше просто создают папку для хранения фото от определенного пользователя
    file_id = msg.document.file_id
    file = await msg.bot.get_file(file_id)
    file_path = file.file_path
    await msg.bot.download_file(
        file_path=file_path,
        destination=f'{path_drd}/{user_id}/{msg.document.file_name}'
    )
    # асинхронная загрузка изображений
    for target_folder in os.listdir(f'{path_drd}'):
        if int(target_folder) == int(user_id):
            for document in os.listdir(f'{path_drd}/{target_folder}'):
                with Image.open(f'{path_drd}/{target_folder}/{document}') as im:
                    print(document)
                    im_crop = im.crop((0, 50, im.width, im.height))
                    im_crop.save(f'{path_dcg}/{target_folder}/{document}')
            break

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

Автор решения: Isaac Azimov

Так как обработка изображения это CPU-bound задача, его нужно делать в отдельном процессе.

Для этого есть ProcessPoolExecutor который может сделать обработку в другом процессе.

Можно почитать этот пример чтобы понять как его использовать и статью про генераторы и asyncio чтобы понять как работает асинхронный код.

→ Ссылка