我在appengine python中延迟了一个任务,它是一个简单的调用,包含所有task_info字符串,字符串列表。它适用于任何任务。
deferred.defer(fetch_service,
_queue = "queue_name",
_countdown = task_counter * 4,
**task_info )
我观察到一种奇怪的行为,当我访问不同URL或不同模块中的某些端点或UI时,这种延迟调用开始失败。每个不同的电话都会引发相同的问题。
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/deferred/deferred.py", line 145, in run
raise PermanentTaskFailure(e)
PermanentTaskFailure: None.fetch_service forbidden in unpickling
寻找任何帮助,或其他遇到同样问题的人。
答案 0 :(得分:4)
此问题特定于Google提供的GAE python scaffold。有一个允许被腌制的方法白名单。
如果您将fetch_service
方法添加到_PICKLE_CLASS_WHITELIST
列表中的base/api_fixers.py
,则会有效。
答案 1 :(得分:1)
任务失败的PermanentTaskFailure
异常indicates,永远不会成功。
这通常意味着当GAE infra尝试安排任务时遇到一些无效条件。
错误消息中的None.fetch_service
字符串指向无效引用:None
没有fetch_service
属性。
这可能表示在无法访问fetch_service
对象的模块中尝试执行任务。我检查显示错误的模块中的导入。