У меня есть приложение стандартной среды Google App Engine, которое работает нормально в течение года или более, которое внезапно отказывается ставить новые отложенные задачи в очередь с помощью deferred.defer.
Вот Python 2.7 код, который выполняет отложенный вызов:
# Find any inventory items that reference the product, and change them too.
# because this could take some time, we'll do it as a deferred task, and only
# if needed.
if upd:
updater = deferredtasks.InvUpdate()
deferred.defer(updater.run, product_key)
В моем файле app.yaml есть необходимые биты для поддержки deferred.defer:
- url: /_ah/queue/deferred
script: google.appengine.ext.deferred.deferred.application
login: admin
builtins:
- deferred: on
И в моей отложенной задаче есть вход в систему поэтому я должен видеть, что он работает, когда он делает:
#-------------------------------------------------------------------------------
# DEFERRED routine that updates the inventory items for a particular product. Should be callecd
# when ANY changes are made to the product, because it should trigger a re-download of the
# inventory record for that product to the iPad.
#-------------------------------------------------------------------------------
class InvUpdate(object):
def __init__(self):
self.to_put = []
self.product_key = None
self.updcount = 0
def run(self, product_key, batch_size=100):
updproduct = product_key.get()
if not updproduct:
logging.error("DEFERRED ERROR: Product key passed in does not exist")
return
logging.info(u"DEFERRED BEGIN: beginning inventory update for: {}".format(updproduct.name))
self.product_key = product_key
self._continue(None, batch_size)
...
Когда я запускаю это в среде разработки на моем компьютере для разработки, все работает нормально. После развертывания его на сервере App Engine обновления инвентаризации никогда не выполняются (т. Е. Отложенная задача не выполняется), и в файлах журналов на сервере нет ошибок (и фактически нет других операций регистрации из отложенной задачи). , Я знаю, что с внезапным движением, чтобы все набрали Python 3 как можно быстрее, библиотека deferred.defer была помечена как не рекомендуемая, потому что она работает только со средой 2.7 Python, и я планировал перейти к задаче очереди для этого, но я не ожидал, что deferred.defer внезапно перестанет работать в существующей среде python.
Любое понимание будет с благодарностью!