GAE Принудительно выдвигает очередь задач для выполнения следующей задачи

У меня есть очереди задач push в GAE со скоростью 1/с. Не каждую задачу в этой очереди нужно выполнять, но я могу убедиться в этом только тогда, когда она вызывается. Поэтому всякий раз, когда вызывается задача, у меня есть оператор «если (условие) выполнить, иначе отбросить».

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

Что я хотел бы спросить - можно ли заставить очередь получить другую задачу прямо сейчас, а не ждать? Или я должен реализовать это самостоятельно?

Если неясно, извините, я постараюсь выразиться лучше.

Заранее спасибо!


person Gricha    schedule 24.07.2012    source источник


Ответы (1)


Вам необходимо работать с вытягивающими задачами для каждой очереди push-задач. также задача на вытягивание. когда ваша push-задача выполняется, арендуйте пакет задач из очереди pull и проверяйте их условие.
Следующим шагом будет отбрасывание всех задач, которые больше не являются «действительными», и выполнение одной действительной задачи. как только вы выполните действительную задачу, вы вернете все оставшиеся задачи (обнулите их время).

Этот поток должен предоставить по крайней мере одну задачу для каждой задачи push, если существует допустимая задача.

person Shay Erlichmen    schedule 24.07.2012
comment
Спасибо, это похоже на то, что я искал :) - person Gricha; 24.07.2012
comment
Если вы все равно собираетесь обрабатывать одну задачу в секунду, вероятно, проще использовать серверную часть для обработки задач, а не очередь push с одной задачей в секунду. - person Nick Johnson; 27.07.2012