0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 9

asyncio.wait vs asyncio.gather

24.01.2020, 03:18. Показов 2938. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Вопросы внизу.
Есть два похожих теста:
#1 - asyncio.wait
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import asyncio
import random
 
async def coro(task_num):
    slp = random.uniform(0, 5)
    print("Starting", task_num)
    await asyncio.sleep(slp)
    print("Finished", task_num, '  Waited:', slp)
    return task_num
 
loop = asyncio.get_event_loop()
tasks = [coro(task_num) for task_num in range(1, 5)]
finished, unfinished = loop.run_until_complete(
    asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED))
 
for task in finished:
    print(task.result())
Результат asyncio.wait:
Code
1
2
3
4
5
6
7
8
9
10
11
12
Starting 3
Starting 2
Starting 1
Starting 4
Finished 4   Waited: 2.465447365500718
Finished 2   Waited: 3.252234981305373
Finished 1   Waited: 4.059306544082098
Finished 3   Waited: 4.489274783935498
1
4
3
2
#2 - asyncio.gather
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import asyncio
import random
 
async def coro(task_num):
    slp = random.uniform(0, 5)
    print("Starting", task_num)
    await asyncio.sleep(slp)
    print("Finished", task_num, '  Waited:', slp)
    return task_num
 
loop = asyncio.get_event_loop()
tasks = asyncio.gather(*[coro(task_num) for task_num in range(1, 5)])
all_groups = asyncio.gather(tasks)
results = loop.run_until_complete(all_groups)
 
for task in results:
    print(task)
Результат asyncio.gather:
Code
1
2
3
4
5
6
7
8
9
Starting 1
Starting 2
Starting 3
Starting 4
Finished 2   Waited: 0.023805889873666497
Finished 1   Waited: 1.942776250239694
Finished 3   Waited: 3.426989460919076
Finished 4   Waited: 4.484858712984893
[1, 2, 3, 4]
Вопросы:
1. Почему в первом тесте задачи стартуют не в последовательности 1,2,3,4 (как во втором тесте)?
2. Почему в первом тесте, когда я перебираю завершенные задачи (for task in finished), результат выводится:
  • НЕ в той последовательности в которой задачи ставились (1,2,3,4 (как во втором)),
  • НЕ в той последовательности в которой задачи фактически были поставлены (3,2,1,4)
  • НЕ в той последовательности в которой задачи фактически завершились (4,2,1,3)?
3. Как-нибудь возможно влиять на ранжирование/приоритетность постановки задач и получения результатов в первом случае?
4. Почему в 1 и 2 случае задачи ставятся по разному и результат ранжируется тоже непонятно как? Тенденция сохраняется даже если slp = 1e-300.

Спасибо всем заранее!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2020, 03:18
Ответы с готовыми решениями:

Asyncio парсер
Подскажите направление, словами, нужен подход к задаче. Используя asynсio надо рекурсивно проверить все внешние ссылки на странице. ...

asyncio Асинхронный Сервер
Доброго времени суток форумчане. Питон прекрасен и многогранен. Предельно прост и понятен :) ... За исключением asyncio Задача...

Параллельный запуск 2 методов через asyncio
Есть необходимость сделать код, продолжающий работу даже при поступлении запроса. Пересмотрела и перечитала кучу информации, но все равно...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2020, 03:18
Помогаю со студенческими работами здесь

Multiprocessing vs multithreading vs AsyncIO при загрузке файлов
Вопрос всезнающему All ! Нужно загрузить/выгрузить много разноразмерных файлов через протокол http. Какой вариант посоветуете выбрать...

В asyncio отстутвует метод create_task и метод run
Здравствуйте, у меня в asyncio отсутствует метод create_task и метод run. Мой код: from bs4 import BeautifulSoup import json import...

Asyncio
Использую библиотеку aiogram. Я хочу закрыть задачу созданной с помощью asyncio.create_task(function(message)) По нажатию...

WxPython и asyncio
Добрый день. Подскажите можно ли в приложении wxPython использовать модуль asyncio? Как я понимаю wxPython, при старте приложения,...

Vk_api и asyncio
Так вот суть в том, что создаю приложение, которое работает с вк и из-за того что запросов много, решил использовать асинхронность, и тут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru