Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 26.03.2022
Сообщений: 21

Как остановить асинхронный код

24.07.2022, 20:52. Показов 2846. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Подскажите пожалуйста как остановить такой код?
cntr c не подходит.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import asyncio
from asyncio import Semaphore
 
import aiohttp
 
 
async def parser(session, semaphore, link_item):  # , stop_event, owner_id, link_count
    await semaphore.acquire()
    # код парсера
    semaphore.release()
    
async def gahter():
    semaphore = Semaphore(20)
    tasks = []
    # stop_event = asyncio.Event()
    connector = aiohttp.TCPConnector(limit=20)
    # connector = aiohttp.TCPConnector()
    async with aiohttp.ClientSession(connector=connector) as session:  # ,  trust_env=True
        for link_count, link in enumerate(links_item):
            task = asyncio.create_task(parser(session, semaphore, link))
            tasks.append(task)
        await asyncio.gather(*tasks)
        # await stop_event.wait()
        
def main():
    # asyncio.get_event_loop().run_until_complete(gahter())
    asyncio.new_event_loop().run_until_complete(gahter())
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2022, 20:52
Ответы с готовыми решениями:

Как остановить работающий код
Всем привет! Нужна ваша помощь. Как остановить работающий код на пайтон? Условие в цикле тут не подойдет, т.к. код будет выполнятся....

Как упросить код и остановить когда доходит до конца
Привет всем, подскажите как упросить код что бы 537 раз не писать exc(). И как его остановить когда он доходит до 537 числа.

Ускорить асинхронный код
Записываю строки в таблицу так from sqlalchemy import insert import config import Table import asyncio from aiopg.sa import...

4
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.07.2022, 21:18
что Вы имеете ввиду под остановить? когда? по какому условию? по таймауту? по завершению тасков?
reboot, наверняка, остановит например..
0
0 / 0 / 0
Регистрация: 26.03.2022
Сообщений: 21
24.07.2022, 21:42  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
что Вы имеете ввиду под остановить? когда? по какому условию? по таймауту? по завершению тасков?
reboot, наверняка, остановит например..
Таски нужно прервать по условию например
if flag == 0:
что здесь нужно сделать? что бы остановить, прервать очередь выполнения заданий и очистить tasks = []

И куда этот иф прописать

Добавлено через 6 минут
Этот парсер стоит на джанге и если начинает собирать что то не то, то нужно прервать процесс чтобы изменить условия поиска.
Не перезагружать же из за этого сервер. И ждать завершения тоже не вариант.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.07.2022, 22:10
Лучший ответ Сообщение было отмечено enika_l как решение

Решение

не знаю, что такое flag и откуда оно берется, но если нужно остановить все таски, вот пример

запускаем ограниченные семафором таски, пока они исполняются, 5 раз выбираем рандомное число от 1 до 5 и если оно 3 - заканчиваем все таски.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import asyncio
from asyncio import Semaphore
from random import randint
 
 
async def parser(semaphore: Semaphore, item):
    async with semaphore:
        num = randint(30, 60)
        print(f'item {item}, sleeping for {num} seconds')
        await asyncio.sleep(num)
 
async def main():
    semaphore = Semaphore(3)
    links_item = [1, 2, 3, 4, 5]
    tasks = []
 
    for _, link in enumerate(links_item):
        task = asyncio.create_task(parser(semaphore, link))
        tasks.append(task)
    
    for _ in range(5):
        await asyncio.sleep(2)
 
        random_stop = randint(1, 5)
 
        print('Generated:', random_stop)
        if random_stop == 3:
            print("Lucky 3, stopping all tasks")
            for t in tasks:
                t.cancel()
            break
    
    await asyncio.wait(tasks)
    
 
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Code
1
2
3
4
5
6
7
8
item 1, sleeping for 6 seconds
item 2, sleeping for 10 seconds
item 3, sleeping for 8 seconds
Generated: 4
Generated: 5
item 4, sleeping for 8 seconds
Generated: 3
Lucky 3, stopping all tasks
2
0 / 0 / 0
Регистрация: 26.03.2022
Сообщений: 21
25.07.2022, 19:36  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
вот пример
Большое спасибо получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2022, 19:36
Помогаю со студенческими работами здесь

Не могу понять как организовать асинхронный код
Набросал с помощью гугла программу которая парсит конкретную веб страничку выкусывая линки и их заголовке. (Речь идёт о сайте stihi.ru и...

Асинхронный клиент: как написать код по мануалу и не запутаться в классах
Всем привет! Прошу помощи, пытаюсь сделать пример как в мануале но не выходит, запутался с классами и методами, Вобщем надо собрать код по...

Transform:rotate как остановить бесконечный цикл, ограничить количество кадров, остановить анимацию
Добрые люди, подскажиет советом, уже сломала голову. Перез загрузкой сайта идёт цикл вращения обьекта вокруг точки (иммитация загрузки) ...

Python + Telegram. Как остановить остановить polling?
Всем привет. Есть необходимость вводить номер с картинки (штрих код), картинка появляется в каталоге раз в час. Хочу вводить число с...

Асинхронный код и GC
Всем привет. У меня есть класс, который в конструкторе запускает асинхронную операцию для работы с сокетами. Скажите, пожалуйста, когда GC...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru