延迟任务中的App Engine Lambda函数限制

时间:2014-01-09 05:46:39

标签: google-app-engine python-2.7 lambda

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函数不能被腌制吗?

1 个答案:

答案 0 :(得分:0)

看了一下后,我想出了答案。首先,看起来我混淆了两件事:限制你可以从延迟库调用的内容以及你可以发送的参数的限制。

调用lambda函数有一个限制。

  

你不能调用lambda函数(但你可能不想这样做   反正)。

意味着以下内容无效。

deferred.defer(lambda x: x.upper(), x)

同时,存在一个限制,即被调用函数的参数必须是可选的。有一组有限的功能可以选择,不包括lambda功能。 (What can be pickled and unpickled?Pickling lambda functions

回答我的问题:

  1. Lambda函数将作为延迟库的参数失败。大多数函数都是如此,除非它们是在模块顶部定义的函数。

  2. 调用lambda函数的限制不适用于任务队列。使用任务队列,您正在对URL进行发布,因此您需要设置请求处理程序,并且该请求处理程序将能够将lambda函数调用到其内容。但是,仍然存在一个限制,即任务队列的参数需要为http POST序列化,因此很可能无论如何都可能无法通过函数。

  3. 是的,见上文。