我有任务延迟在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
寻找任何帮助,或者其他遇到同样问题的人
此问题特定于Google提供的GAE python scaffold。有一个允许pickle的方法白名单。
如果您将fetch_service
方法添加到base/api_fixers.py
列表中的_PICKLE_CLASS_WHITELIST
,它将工作
PermanentTaskFailure
异常表示任务失败,并且永远不会成功。
这通常意味着当GAE基础架构尝试调度任务时遇到一些无效条件。
错误消息中的None.fetch_service
字符串指向无效引用:None
没有fetch_service
属性。
这可能表明任务在一个没有访问fetch_service
对象的模块中执行。我会检查显示错误的模块中的导入。