2010-06-07 1 views
2

В видео/PDF из «Конвейеры данных с Google App Engine» Бретт ставит «сейчас/30» в имя задачи, отметив, что позже он объяснит причину, но почему-то он этого не делает. :)
http://www.youtube.com/watch?v=zSDC_TU7rtc#t=41m35Почему имя задачи содержит «now/30»?

task_name = '%s-%d-%d' % (sum_name, int(now/30), index) 

Есть ли у вас какие-либо идеи о причине? Имеет ли это какое-либо отношение к 7-дневному периоду, когда нельзя повторять использование имен задач?

Link to the session page

+1

Не повторять тег в строке темы. Это не нужно. –

+0

Я не был уверен, что люди читают теги, поэтому я не хотел быть слишком расплывчатым, когда спрашивал. Но хорошо, спасибо. :) –

+1

Использует ли теги google особенно при индексации? если нет, не будут ли все ключевые слова в названии потенциально увеличиваться на pagerank? –

ответ

3

Brett Slatkin's own explanation

[Бретт]
Привет всем,

INT (time.time()/30) часть имени задачи является предотвращение киосков очереди. Когда memcache выдается, счетчик индекса работы сбрасывается до нуля. Это означает, что новые рабочие элементы fork-join могут вставлять задачи, которые называются теми же, что и заданные задачи. Включив в названии задачи временное окно ~ 30 секунд, мы гарантируем, что эта проблема может продолжаться только около тридцати секунд. Вот почему вы должны возбуждать исключение, когда вы видите исключение TombstonedTaskError.

Сценарий наихудшего случая, если часы являются неустойчивыми, заключается в том, что выполняются две задачи для работы в режиме вентилятора вместо одного, что является приемлемым компромиссом во многих случаях и фундаментальной возможностью при использовании очереди задач API. Это можно смягчить с помощью объектов подтверждения распознавания голубя, как я использую в моем примере с материализованным представлением.

Надежда, что помогает,
[/ Brett]

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