Отдельно разберём TaskGroup, который пришел на замену gather в Python 3.11.
Ключевые отличия
▫️create_task() возвращает объект asyncio.Task, у которого есть соответствюущие методы управления. То есть у нас больше контроля
▫️это контекстный менеджер, который гарантирует что все таски будут остановлены по выходу из контекста
▫️ошибка автоматически отменяет незавершенные задачи,
▫️except* передает нам ExceptionGroup, в котором каждую ошибку можно обработать отдельно
import asyncio
import random
async def do_it() -> str:
if random.random() < 0.1:
raise ValueError('Oops')
delay = random.uniform(0.5, 1.5)
await asyncio.sleep(delay)
return delay
async def main():
try:
async with asyncio.TaskGroup() as tg:
for _ in range(10):
tasks.append(tg.create_task(do_it()))
for t in tasks:
print(t.result())
except *ValueError as e:
for err in e.exceptions:
print(err)
asyncio.run(main())
Рекомендую изучить страницу Coroutines and Tasks из документации, где представлено больше интересных примеров и механизмов
- таймауты
- отмена задач
- создание задач из другого потока
#async
#RAD/USDT analysis :
#RAD is currently experiencing a bearish trend, trading below the 200 EMA. The price is forming lower lows (LLs) and lower highs (LHs).
At present, it is testing the resistance zone along with the 200 EMA. A reversal is anticipated from this level, allowing the price to resume its bearish momentum and potentially test lower levels.
TF : 1H
Entry : $0.840
Target : $0.779
SL : $0.875
#RAD/USDT analysis :
#RAD has broken out and retested the previous support levels. It is expected to reject from the current level and test lower levels.
TF : 1h
Entry : $1.209
Target : $1.127
SL : $1.268