App Engine文档指出您不应使用lambda functions with the deferred library。
1)此限制是否仅适用于使用lambda keyword的函数?或者它是否也将传递函数限制为延迟任务?
def formatA(a):
return a.upper()
def formatB(b):
return b.capitalize()
def applyFormat(elements, format_funcs):
for i, element in enumerate(elements):
formatted_element = format_funcs[i](element)
deferred.defer(applyFormat, (a,b), (normalizeA, normalizeB))
2)此限制是否也适用于任务队列?
3)为什么?这是因为lambda函数不能被腌制吗?
答案 0 :(得分:0)
调用lambda函数有一个限制。
你不能调用lambda函数(但你可能不想这样做 反正)。
意味着以下内容无效。
deferred.defer(lambda x: x.upper(), x)
同时,存在一个限制,即被调用函数的参数必须是可选的。有一组有限的功能可以选择,不包括lambda功能。 (What can be pickled and unpickled?,Pickling lambda functions)
回答我的问题:
Lambda函数将作为延迟库的参数失败。大多数函数都是如此,除非它们是在模块顶部定义的函数。
调用lambda函数的限制不适用于任务队列。使用任务队列,您正在对URL进行发布,因此您需要设置请求处理程序,并且该请求处理程序将能够将lambda函数调用到其内容。但是,仍然存在一个限制,即任务队列的参数需要为http POST序列化,因此很可能无论如何都可能无法通过函数。
是的,见上文。