Функция asyncio.wait() это еще один способ вызвать множество асинхронных задач.
Она работает в нескольких режимах.
1. Самый простой - ждем завершения всех задач
async def main():
tasks = [asyncio.create_task(do_it(i)) for i in range(10)]
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.ALL_COMPLETED
)
for task in done:
try:
print(task.result())
except Exception as e:
print(e)
Очень похоже на gather, но работает не так.
▫️возвращает не результаты, а два сета с объектами Task у которых можно забрать результат через task.result() если они в списке done
▫️не гарантирует порядок результатов так как оба объекта это set
▫️не выбрасывает исключение когда оно появляется, а сохраняет его в Task. Исключение появится когда попробуете забрать резултьтат.
2. Ждем завершения первой задачи, даже если там ошибка.
async def main():
tasks = [asyncio.create_task(do_it(i)) for i in range(3)]
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.FIRST_COMPLETED
)
# в done может быть несколько задач!
for task in done:
try:
print(task.result())
except Exception as e:
print(f"Fail: {e}")
# Оставшиеся задачи в pending, как правило, нужно отменить, иначе они будут продолжать работать
for task in pending:
task.cancel()
В сете done будут таски которые успели завершится, причем как успешно так и нет.
3. До первой ошибки.
Тоже самое, но с аргументом FIRST_EXCEPTION
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.FIRST_EXCEPTION
)
Функция завершается как только первая задача упадет с ошибкой.
Учтите, что в любом случае done вы можете обранужить несколько задач, как с ошибками так и успешные.
↗️ Полный листинг примеров здесь
#async
Altocumulus clouds putting on a post-storm sunset show! 🌅☁️
After a thunderstorm mid-level clouds like altocumulus are often spotted. These clouds are the ideal backdrop for vibrant skies because they catch sunlight, creating those deep, fiery colours we love.😍#WeatherWednesday
#WeatherWednesday Planning for an outdoor adventure? This message is for you!
While some UV exposure is important for health functions, excessive exposure may be harmful to your skin and eyes. Minimise the effects by:
✅ Using sunscreen (at least SPF 30)
✅ Using an umbrella and seeking shade
✅ Wearing sunglasses that block UVA/UVB rays
✅ Wearing a broad-brimmed hat
#WeatherWednesday. With climate change, many countries in the world are seeing rising temperatures. ☀️🌡️
Minimise your risks of heat stress and heat-related illnesses, with the Heat Stress Advisory on myENV app (www.nea.gov.sg/myENV) or www.weather.gov.sg.
Get helpful tips on how you can adjust your activities, take protective actions, and wear appropriate attire depending on the prevailing heat stress levels.
Before heading out for prolonged outdoor activities, check out tips on how you can adjust your activities, take protective actions and wear appropriate attire depending on the prevailing heat stress levels on myENV app or www.weather.gov.sg.
#WeatherWednesday
#WeatherWednesday Mark your calendars, we're counting down to the celestial spectacle in the night sky! The Harvest Moon 🌕 is set to grace us with its luminous presence on 29 Sep 2023.
Share your best photos using #WeatherWednesday and stand a chance to be featured! 📸✨
For those who answered A, B or C, you may be experiencing pareidolia! It is the term used for the human tendency to see a specific image in random visual patterns. Most of us have experienced it at least once! #WeatherWednesday
Have you ever seen a faint coloured ring circling the sun? These are halos, which are formed by the refraction of sunlight through ice crystals in high-level clouds.
P.S. Remember not to look directly at the sun!
#WeatherWednesday
Have you ever spotted a funnel of water out at sea? This is a waterspout - a rotating column of air that descends from the base of a thunderstorm cloud. They are usually short-lived, lasting between 10 to 30 minutes before quickly dissipating when it nears the coast.
There are an average of 3 occurrences of waterspouts in waters off Singapore per year. If you see one, exit the waters quickly as they can move at speeds up to 80km/h!
#WeatherWednesday
Ever noticed that it gets foggy after prolonged or heavy rainfall? This is because the air is saturated with water vapour, which then condenses around the dust particles in the air, and clumps together. Hence, the fogginess!
#WeatherWednesday
#WeatherWednesday Lightning strikes emit electromagnetic waves that can be detected by a ground-based lightning detection sensor.
Singapore has 4 ground-based sensors which triangulate each strike and determine their location & characteristics! Learn more: go.gov.sg/weather-instruments
#WeatherWednesday How many hours of sunlight do we get? The sunshine recorder measures just that!
As the sun’s rays pass through the instrument’s glass globe, it burns a hole on a recorder card placed at its base.
Learn more at go.gov.sg/weather-instruments