Очередь задач Google App Engine - PullRequest
       38

Очередь задач Google App Engine

3 голосов
/ 25 февраля 2011

Я хочу запустить 50 задач. Все эти задачи выполняют один и тот же кусок кода. Только разница будет в данных. Что будет завершено быстрее?

а. Очередь 50 задач в очереди

б. Постановка в очередь 5 задач каждая в 10 различных очередей

Есть ли идеальное количество задач, которые можно поставить в очередь в 1 очередь перед использованием другой очереди?

Ответы [ 4 ]

3 голосов
/ 25 февраля 2011

Скорость выполнения задач зависит от двух факторов: количества экземпляров, на которых работает ваше приложение, и скорости выполнения очереди, в которой находятся задачи.

Максимальная скорость выполнения очереди задач равнатеперь 100 на очередь в секунду, так что это вряд ли будет ограничивающим фактором - так что нет никакого вреда в добавлении их в одну и ту же очередь.В любом случае, разделение между очередями для большей скорости выполнения является в лучшем случае взломом.Очереди предназначены для функционального разделения, а не для измерения производительности.

0 голосов
/ 18 июля 2011

Я бы добавил еще один фактор в микс-параллелизм.Если у вас медленные задачи (более 30 секунд или около того), то AppEngine, похоже, изо всех сил пытается увеличить правильное количество экземпляров для обработки запросов (кажется, для меня это максимум 7-8).

Начиная с SDK 1.4.3, в вашем queue.xml и вашем appengine-web.config есть настройка, которую вы можете использовать, чтобы сообщить AppEngine, что каждый экземпляр может обрабатывать более одной задачи одновременно:

<threadsafe>true</threadsafe> (in appengine-web.xml)
<max-concurrent-requests>10</max-concurrent-requests> (in queue.xml)

Это решило все мои проблемы с задачами, выполняющимися слишком медленно (несмотря на установку всех остальных параметров очереди на максимум)

Подробнее (http://blog.crispyfriedsoftware.com)

0 голосов
/ 25 февраля 2011

Скорость пакетной обработки очередей заданий зависит от размера сегмента. Если в корзине очереди есть токен, задача должна быть запущена немедленно. Так что если у вас есть:

queue:
- name: big_queue
  rate: 50/s
  bucket_size: 50

И не нужно ставить никаких задач в секунду, все задачи должны начаться сразу.

см. http://code.google.com/appengine/docs/python/config/queue.html#Queue_Definitions для получения дополнительной информации.

Разделение задач на разные очереди не улучшит время отклика, если у корзины не было достаточно времени, чтобы полностью заполнить токены.

0 голосов
/ 25 февраля 2011

Поставьте в очередь 50 задач и настройте свою очередь на обработку 10 за один раз или что угодно, если они могут выполняться независимо друг от друга. Я вижу похожую проблему, и я просто запускаю 10 задач одновременно, чтобы обработать 3300 или около того, что мне нужно для запуска. Обработка всех из них занимает около 45 минут, но, как ни странно, время, используемое процессором, ничтожно мало.

...