groupbwt / scrapy-boilerplate

Scrapy project boilerplate done right
MIT License
42 stars 25 forks source link

feat(producer): add delay option #85

Closed LyricalToxic closed 2 years ago

LyricalToxic commented 2 years ago

Обзор изменений

Добавлена новая возможность изменения стандартного времени ожидания для rmq.commands.producer.Producer. По умолчанию время ожидания default_delay_timeout=60 секунд. Для переопределения этого параметра необходимо указать опцию при запуске -d/--delay и значение целое число (количество секунд).

Проблема, которую решает это изменение

При парсинге пагинаций реализована логика:

При такой логике 1 экземпляр продюсера:

Изменив default_delay_timeout на меньшее значение -> 5 секунд, количество простоя уменьшится -> скорость возрастет.

Использование

Пример использования:

scrapy example_producer -m worker -d 10

Контракт

Опция -d/--delay принимает положительное число. В противном случае будет залоггировано сообщение с предупреждением и будет применено стандартное время ожидание.

vulreid commented 2 years ago

думаю, надо или переименовать _delay в Consumer (_delay -> calculate_delay) или не переименовывать здесь. В целом, твоя постановка задачи ранее решалась переопределением delay в команде-наследнике. Аргумент командной строки тоже в целом походит, но я за консистентность методов и все же за то, чтобы он был "protected" (с одного нижнего ``) - служебный, но по сигнатуре доступен для переопределения наследниками.

LyricalToxic commented 2 years ago

@vulreid

  1. В консумере нет метода _delay
  2. Определение опции delay позволит более гибко настраивать default_delay_timeout
  3. Сделал метод calculate_delay "protected". Думаю имеет смысл составить правила и критерии когда метод или атрибут должен быть public, protected или private в бойлерплейте. Потому что сейчас в том же Producer есть методы и атрибуты, которые должны быть по идее protected или даже private, но таковыми не являются.