Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2018 10:14:37

AlekseyPython
Зарегистрирован: 2018-10-24
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

Хочу сделать большое количество запросов к одному сайту (порядка 1 000 000).

Если я буду использовать модуль asyncio, то насколько я понял мне нужно будет сразу набросать все задачи и скормить их event loop, а он уже будет передавать управление между различными корутинами. Мне подобный подход кажется неудобным:
1. Нет возможности установить количество конкуретно выполняющихся задач (т.е. я набросал 1 000 000 задач, но одновременно конкуретно можно выполнять не более 10).
2. Нельзя подбрасывать задачи по мере выполнения, а нужно их создать до запуска event loop.

Как решить эти вопросы?

Отредактировано AlekseyPython (Окт. 24, 2018 10:20:12)

Офлайн

#2 Окт. 24, 2018 10:29:02

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

AlekseyPython
Миллион запросов ОДНОВРЕМЕННО сделать никак не получится. Ну просто у операционной системы нет столько дескрипторов. Вы можете отправить их последовательно или параллельно некоторыми пачками и в этом случае, конечно, выгоднее делать это асинхронно

Офлайн

#3 Окт. 24, 2018 11:13:19

AlekseyPython
Зарегистрирован: 2018-10-24
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

Papa_Svin
AlekseyPythonМиллион запросов ОДНОВРЕМЕННО сделать никак не получится. Ну просто у операционной системы нет столько дескрипторов. Вы можете отправить их последовательно или параллельно некоторыми пачками и в этом случае, конечно, выгоднее делать это асинхронно

Я про это и задал вопрос: как создавать зачачи в процессе выполнения и как управлять нагрузкой.

Офлайн

#4 Окт. 24, 2018 11:57:39

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

AlekseyPython
Я про это и задал вопрос: как создавать зачачи в процессе выполнения и как управлять нагрузкой.
Вы хоть что-то знаете про веб и сетевое программирование вообще?
Каков ваш уровень компетенции?
Самы простой вариант - взять и в цикле синхронно выполнять запросы. Можно делать то же самое, но разбив программу на потоки. Можно выполнять несколько запросов используя неблокирующий вызов. Можно объединить эти два подхода.

Непонятно, что вам конкретно непонятно.

Офлайн

#5 Окт. 24, 2018 13:09:01

AlekseyPython
Зарегистрирован: 2018-10-24
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

Papa_Svin
В топике я задал два вопроса и спросил как их можно реализовать с помощью asyncio.

Офлайн

#6 Окт. 24, 2018 13:21:47

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

AlekseyPython
В стартовом посте нет вопросов, там есть два утверждения, которые не имеют отношения к asyncio.

Офлайн

#7 Окт. 24, 2018 13:33:02

AlekseyPython
Зарегистрирован: 2018-10-24
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

Papa_Svin
AlekseyPythonВ стартовом посте нет вопросов, там есть два утверждения, которые не имеют отношения к asyncio.

Я не понимаю зачем вы меня троллите?

Офлайн

#8 Окт. 24, 2018 19:56:34

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

AlekseyPython
Я не понимаю зачем вы меня троллите?
Я вас не троллю, я искренне пытаюсь понять вашу проблему, а вы не хотите её описать.
Вот вы пишите
Нет возможности установить количество конкуретно выполняющихся задач
Какие к черту конкурентные задачи в asyncio? Этот фреймворк не имеет отношения к паралеллизму. Ну вообще никак.
Вы не понимаете как работает asyncio, и не задаете вопросов, которые вам бы помогли понять, как с ним работать. Вам надо решить вашу задачу, так как вы хотите, средствами которые так не работают. Вы говорите, что у вас есть вопросы, но вопросов вы не задаете, вы дали несколько утверждений, которые не имеют отношения к реальности, и хотите, чтобы вам на это что-то ответили. Ну и как ответить на бред?

Офлайн

#9 Окт. 24, 2018 23:33:47

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

Офлайн

#10 Окт. 26, 2018 11:42:47

AlekseyPython
Зарегистрирован: 2018-10-24
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?

doza_and
Документация вроде ясно написана.https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphorehttps://docs.python.org/3/library/asyncio-queue.html#asyncio-queues

Спасибо, за беседу по существу.
В примере к очередям есть непонятные мне строки кода. Можете мне помочь их понять?

1.
  # Wait until the queue is fully processed.
    started_at = time.monotonic()
    await queue.join()
    total_slept_for = time.monotonic() - started_at

Почему мы ждем очередь? Ведь исполнители лежат в tasks (которые пока никак не запускались на выполнение), а в очереди только случайные числа! И почему время рассчитывается по этому куску кода, ведь никто не запущен на выполнение!

2.
 # Cancel our worker tasks.
    for task in tasks:
        task.cancel()
Зачем этот код? У нас есть исполнители, которые должны спать время, которое они получают в цикле из очереди. Зачем какие- то кенселы посылать?

Отредактировано AlekseyPython (Окт. 26, 2018 11:43:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version