Найти - Пользователи
Полная версия: Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?
Начало » Python для новичков » Какую стратегию интернет- скрапинга выбрать, чтобы был хороший менеджер нагрузки?
1 2
AlekseyPython
Хочу сделать большое количество запросов к одному сайту (порядка 1 000 000).

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

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

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

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

Я не понимаю зачем вы меня троллите?
Papa_Svin
AlekseyPython
Я не понимаю зачем вы меня троллите?
Я вас не троллю, я искренне пытаюсь понять вашу проблему, а вы не хотите её описать.
Вот вы пишите
Нет возможности установить количество конкуретно выполняющихся задач
Какие к черту конкурентные задачи в asyncio? Этот фреймворк не имеет отношения к паралеллизму. Ну вообще никак.
Вы не понимаете как работает asyncio, и не задаете вопросов, которые вам бы помогли понять, как с ним работать. Вам надо решить вашу задачу, так как вы хотите, средствами которые так не работают. Вы говорите, что у вас есть вопросы, но вопросов вы не задаете, вы дали несколько утверждений, которые не имеют отношения к реальности, и хотите, чтобы вам на это что-то ответили. Ну и как ответить на бред?
doza_and
Документация вроде ясно написана.
https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphore
https://docs.python.org/3/library/asyncio-queue.html#asyncio-queues
AlekseyPython
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()
Зачем этот код? У нас есть исполнители, которые должны спать время, которое они получают в цикле из очереди. Зачем какие- то кенселы посылать?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB