2016-06-14 2 views
0

У меня есть одно сомнение в том, что вы ставите задачу, используя удар присоски.enqueuing jobs using sucker punch

У меня 2000+ ключевых слов в моей базе данных. Я хочу знать рейтинг google и bing для каждого ключевого слова в моей базе данных. Для этого я использую Authority Labs API. Но AuthorityLabs будет обрабатывать 1000 запросов POST только через 1 час. Я отправляю каждый запрос в AuthorLab в качестве фонового задания, используя удар присоски. Как я могу ограничить только 1000 заданий, будет работать через 1 час, оставшиеся задания начинаются только через час. Также я хочу ежедневно запускать эти задания для анализа изменения ранга.

ответ

0

Ограничение скорости не является проблемой вашей системы очередей, а тем более SuckerPunch, которая не предназначена для обработки передовых средств задержки/ожидания, просто переносит асинхронные задания в поток из пула потоков.

Если вы действительно хотите ограничить скорость, используйте реальную систему очередей, такую ​​как Sidekiq, и поместите некоторый фактический код в работу.

Sidekiq Enterprise поддерживает его изначально: https://github.com/mperham/sidekiq/wiki/Ent-Rate-Limiting Sidekiq-throttler, кажется, обеспечивает ту же функциональность: https://github.com/gevans/sidekiq-throttler

Но вы также можете просто отложить исполнение (так упреждающие ограничения скорости), по enqueuing рабочих мест в определенное время в будущем (каждый из которых выполняется через 4 минуты после другого) или закладывает только одно задание, выполняющее себя (выполнение следующего невыполненного запроса) и завершает себя снова с задержкой в ​​4 минуты.

Как всегда с открытым исходным кодом, проверьте код и решите самостоятельно.

0

Не могли бы вы сделать что-нибудь подобное?

YourProcessingJob.set(wait: 1.hours).perform_later 

Возможно, в задаче на заказ грабли ...

Смежные вопросы