Почему имя задачи содержит «сейчас / 30»? - PullRequest
2 голосов
/ 07 июня 2010

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

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

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

Ссылка на страницу сеанса

1 Ответ

3 голосов
/ 08 июня 2010

собственное объяснение Бретта Слаткина

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

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

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

Надеюсь, это поможет,
[/ Brett]

...