powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как добавлять асинхронные задачи по мере их необходимости?
8 сообщений из 8, страница 1 из 1
Как добавлять асинхронные задачи по мере их необходимости?
    #39756464
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял, можно поступить двумя способами:
1. Последовательно запустить две асинхронные задачи (сначала ПОЛНОСТЬЮ выполнится первая задача и только потом вторая):
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
import asyncio
import time

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")

    await say_after(1, 'hello')
    await say_after(2, 'world')

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())



2. Запустить несколько задач параллельно:
Код: 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.
import asyncio

async def factorial(name, number):
    f = 1
    for i in range(2, number + 1):
        print(f"Task {name}: Compute factorial({i})...")
        await asyncio.sleep(1)
        f *= i
    print(f"Task {name}: factorial({number}) = {f}")

async def main():
    # Schedule three calls *concurrently*:
    await asyncio.gather(
        factorial("A", 2),
        factorial("B", 3),
        factorial("C", 4),
    )

asyncio.run(main())

# Expected output:
#
#     Task A: Compute factorial(2)...
#     Task B: Compute factorial(2)...
#     Task C: Compute factorial(2)...
#     Task A: factorial(2) = 2
#     Task B: Compute factorial(3)...
#     Task C: Compute factorial(3)...
#     Task B: factorial(3) = 6
#     Task C: Compute factorial(4)...
#     Task C: factorial(4) = 24



А можно как- то по мере выполнения нескольких задач понять, что они не полностью загружают систему и добавить еще нагрузки? Т.е. чтобы получилось динамически менять нагрузку на систему.
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39756466
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLони не полностью загружают системуКак Вы предполагаете оценивать полноту загрузки - по системному Load Average или по заранее заданному предельно допустимому суммарному уровню загрузки с учетом некоторого коэффициента от каждого вида задачи? Первый способ довольно медленный и инерционный, во втором весьма сложно, а то и невозможно учесть другие процессы.
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39756468
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleAlekseySQLони не полностью загружают системуКак Вы предполагаете оценивать полноту загрузки - по системному Load Average или по заранее заданному предельно допустимому суммарному уровню загрузки с учетом некоторого коэффициента от каждого вида задачи? Первый способ довольно медленный и инерционный, во втором весьма сложно, а то и невозможно учесть другие процессы.

Я делаю запросы к интернет- серверу через определенные промежутки в установленных лимитов на количество запросов. Тогда я запущу еще потоки, которые будут делать параллельно запросы так, чтобы их общее количество не превышало лимиты сервера. Это очень похоже на менеджеры загрузки, которые запускают сразу несколько потоков.
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39756471
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPDATE:
Я делаю запросы к интернет- серверу через определенные промежутки времени, таким образом чтобы оставаться в рамках установленных лимитов на количество запросов.
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39756529
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLв рамках установленных лимитов на количество запросовВот это вполне понятно. Где-то есть число, которое показывает максимальное количество запросов в единицу времени. Или число, указывающее количество запросов до истечения учетного периода.
Как вариант, это значение можно определить или вычислить, анализируя ответы сервера, например, контролируя в ответе сообщение об ошибке превышения лимитов.

AlekseySQLлимиты сервераА вот это, как раз, и не понятно. Можете пояснить, что это такое и откуда его взять можно?
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39756973
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleAlekseySQLв рамках установленных лимитов на количество запросовВот это вполне понятно. Где-то есть число, которое показывает максимальное количество запросов в единицу времени. Или число, указывающее количество запросов до истечения учетного периода.
Как вариант, это значение можно определить или вычислить, анализируя ответы сервера, например, контролируя в ответе сообщение об ошибке превышения лимитов.

AlekseySQLлимиты сервераА вот это, как раз, и не понятно. Можете пояснить, что это такое и откуда его взять можно?

Да что вы в эти ЛИМИТЫ уперлись? Я их ЗНАЮ!
Мне надо уметь добавлять/удалять асинхронную задачу "на лету" с помощью asyncio. Не заранее сформировать массив с определенным количеством задач, а добавлять / удалять в процессе работы программы (анализируя скорость ответов сервера).
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39756995
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLДа что вы в эти ЛИМИТЫ уперлись? Я их ЗНАЮ!Вообще то, Вы в самом первом посте задали вопрос именно про полноту загрузки системы: AlekseySQLА можно как- то по мере выполнения нескольких задач понять, что они не полностью загружают систему и добавить еще нагрузки?
...
Рейтинг: 0 / 0
Как добавлять асинхронные задачи по мере их необходимости?
    #39758210
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напишу ответ для будущих поколений. Метод
Код: python
1.
task = asyncio.create_task(speaker("extra work"))



не только создает задачу, но и запускает ее в текущем event loop-е. Так что достаточно просто создать новую задачу, чтобы повысить нагрузку на систему. По мере ее завершения нагрузка уменьшится.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как добавлять асинхронные задачи по мере их необходимости?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]