Как работают очереди задач Google App Engine?
Я запутался в выполнении задачи с использованием очередей. Я прочитал документацию, и мне показалось, что я понял bucket_size и скорость, но когда я отправляю 20 задач в очередь, равную 5/h, размер 5, все 20 задач выполняются один за другим как можно быстрее, заканчивая меньше, чем 1 минута.
deferred.defer(spam.cookEggs,
egg_keys,
_queue="tortoise")
- name: tortoise
rate: 5/h
bucket_size: 5
Я хочу создать 10 или 100 задач, я хочу, чтобы 5 из них запускались в час. Таким образом, для завершения потребуется около 20 задач. Я хочу, чтобы их исполнение распространилось.
UPDATE
Проблема заключалась в том, что я предполагал, что при запуске локально соблюдались правила скорости выполнения этой задачи, но это не так. Вы не можете проверять уровни выполнения на локальном уровне. Когда я развернулся к производству, размер и размер ведра, которые я установил, выполнены, как я ожидал.
Ответы
Ответ 1
Уровень выполнения не соблюдается приложением app_devserver. Эта проблема не должна возникать при производстве.
[Ответ, обнаруженный Ником Джонсоном и/или автором вопроса; размещение здесь в качестве вики сообщества, поэтому у нас есть что-то, что может быть отмечено с учетом принятого решения.
Ответ 2
Вы хотите установить bucket_size
в 1, иначе у вас будут "всплески" в очереди, как вы там видели.
Из документации:
bucket_size
Ограничивает разрывность очереди например, более высокий размер ковша позволяет увеличить пики в очереди исполнение. Например, рассмотрим очередь со скоростью 5/с и размер ковша 10. Если эта очередь имеет в течение некоторого времени его "маркерное ведро" для заполнения) и 20 задачи внезапно завершаются, это будет разрешено выполнять 10 задач немедленно. Но в следующем во-вторых, еще 5 задач будут для выполнения, потому что токен ведро было истощено и заправки по указанной норме 5/с.