Добавить вызовы функций в asyncio.gather до тех пор, пока условие не будет выполнено?Python

Программы на Python
Ответить
Anonymous
 Добавить вызовы функций в asyncio.gather до тех пор, пока условие не будет выполнено?

Сообщение Anonymous »

Я скачиваю папки с помощью aiohttp. Однако я хочу прекратить загрузку, когда на жестком диске останется только 200 ГБ свободного места: Сейчас я делаю это следующим образом:

Код: Выделить всё

async def main():
split_list = numpy.array_split(folders_to_download, int(len(folders_to_download)/100 + 1))
for numpy_list in split_list:
async with aiohttp.ClientSession() as session:
total, used, free = await aioshutil.disk_usage("/media/hdd")
if free * 10 ** (-9) >= 200:
list_to_pass = numpy_list.tolist()
tasks = [download_folder(folder, session) for folder in list_to_pass]
await asyncio.gather(*tasks)
Я разделяю список папок, которые у меня есть, на части списков размером прибл. 100 записей, а затем я загружаю их параллельно, используя asyncio.gather. Но это не очень эффективно, поскольку asyncio ожидает загрузки всех 100 папок, прежде чем будут загружены следующие 100 папок.
Чего я хотел бы достичь: как только одна папка будет завершена загрузка Я хотел бы начать загрузку следующей папки, пока на жестком диске не останется 200 ГБ свободного места. Затем я хотел бы прекратить добавление папок в очередь и просто завершить загрузку папок, находящихся в очереди.

Подробнее здесь: https://stackoverflow.com/questions/792 ... fullfilled
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»