Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как добавлять асинхронные задачи по мере их необходимости? / 8 сообщений из 8, страница 1 из 1
07.01.2019, 11:11
    #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
07.01.2019, 11:45
    #39756466
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавлять асинхронные задачи по мере их необходимости?
AlekseySQLони не полностью загружают системуКак Вы предполагаете оценивать полноту загрузки - по системному Load Average или по заранее заданному предельно допустимому суммарному уровню загрузки с учетом некоторого коэффициента от каждого вида задачи? Первый способ довольно медленный и инерционный, во втором весьма сложно, а то и невозможно учесть другие процессы.
...
Рейтинг: 0 / 0
07.01.2019, 12:28
    #39756468
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавлять асинхронные задачи по мере их необходимости?
vkleAlekseySQLони не полностью загружают системуКак Вы предполагаете оценивать полноту загрузки - по системному Load Average или по заранее заданному предельно допустимому суммарному уровню загрузки с учетом некоторого коэффициента от каждого вида задачи? Первый способ довольно медленный и инерционный, во втором весьма сложно, а то и невозможно учесть другие процессы.

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

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

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

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



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


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