1

Многие популярные очереди задач (такие как Google GAE TaskQueue, Celery) имеют функцию ETA/Countdown, которая позволяет задавать задачу в очередь после xxx секунд.Реализовать TaskQueue (например, Celery) с ETA/Countdown

Я работаю над проектом, которому нужна очередь задач с функцией ETA. Однако есть некоторые ограничения, которые я должен использовать в системе обмена сообщениями Google Pubsub. У Pubsub нет функции ETA. Мне интересно, как реализовать надежный и масштабируемый механизм ETA для очереди задач. Приветствуются как идеи общей архитектуры, так и фактические примеры кода.

Наша система вмещает 600-2000 задач в секунду, и около 10% из них должны иметь ETA. Это распределенная система и критическая производительность.

Я попытался проследить источник code сельдерея, но не смог найти фактическую логику обращения с ETA. Было бы хорошо, если бы кто-то мог указать мне на файл/код Celery, который обрабатывает ETA.

ответ

0

Думаю, я мог бы найти, как это сделал сельдерей. В eventlet.py используется функция spawn_after eventlet для задержки создания рабочего времени «ETA».

secs = max(eta - monotonic(), 0) g = self._spawn_after(secs, entry)