Python 如何在app engine中创建一个作用域为单个请求的变量?
我正在为googleappengine创建一个python应用程序,我遇到了一个性能问题,一些昂贵的操作在单个请求中重复。为了帮助解决这个问题,我想创建一种小型缓存,其作用域为单个请求。这与会话范围或应用程序范围的缓存相反,这两种缓存对于我的特定问题都没有意义 我原以为我可以使用python全局或模块级变量来实现这一点,但事实证明,这些变量以不明显的方式在请求之间维护它们的状态 我也不认为memcache有意义,因为它是应用程序范围的 我还没有在谷歌的文档中找到一个很好的答案。也许这是因为它要么是一个愚蠢的想法,要么是完全显而易见的,但它似乎是有用的,我被难倒了Python 如何在app engine中创建一个作用域为单个请求的变量?,python,google-app-engine,Python,Google App Engine,我正在为googleappengine创建一个python应用程序,我遇到了一个性能问题,一些昂贵的操作在单个请求中重复。为了帮助解决这个问题,我想创建一种小型缓存,其作用域为单个请求。这与会话范围或应用程序范围的缓存相反,这两种缓存对于我的特定问题都没有意义 我原以为我可以使用python全局或模块级变量来实现这一点,但事实证明,这些变量以不明显的方式在请求之间维护它们的状态 我也不认为memcache有意义,因为它是应用程序范围的 我还没有在谷歌的文档中找到一个很好的答案。也许这是因为它要么
有人有什么想法吗?模块变量可能(也可能不)在请求之间保持不变(相同的应用程序实例可能在请求之间保持活动状态,也可能不保持活动状态),但您可以在开始处理请求时,或者当您知道已处理完请求时,明确清除它们(
del
,或者设置为None
)。在最坏的情况下(如果您的代码是特殊组织的),您需要设置一些函数,以便在每次请求开始时或每次请求结束时始终执行。模块变量可能(也可能不)在请求之间保持不变(相同的应用程序实例可能在请求之间保持活动状态),但您可以显式清除它们(del
,或者设置为None
,比如)在开始处理请求时,或者当您知道您已经处理完请求时。最坏的情况是(如果您的代码是特殊组织的)您需要设置一些函数,以便在每次请求开始或每次请求结束时始终执行。使用本地列表存储数据并执行模型。在请求处理结束时保存多个db Trip使用本地列表存储数据并执行模型。在请求处理结束时保存多个db Trip我通常做的是只是在请求对象上创建一个新属性。但是,我将django与AppEngine一起使用,所以我不确定AppEngine webapp框架是否有任何不同之处
def view_handler(request):
if hasattr(request, 'mycache'):
request.mycache['counter'] += 1
else:
request.mycache = {'counter':1,}
return HttpResponse("counter="+str(request.mycache["counter"]))
我通常只是在请求对象上创建一个新属性。但是,我在AppEngine中使用django,所以我不确定AppEngine webapp框架是否有什么不同
def view_handler(request):
if hasattr(request, 'mycache'):
request.mycache['counter'] += 1
else:
request.mycache = {'counter':1,}
return HttpResponse("counter="+str(request.mycache["counter"]))
如果您使用的是App Engine附带的“webapp”框架(或者实际上是大多数其他WSGI baesd框架),则会为每个请求实例化一个新的RequestHandler。因此,您可以在处理程序类上使用类变量来存储每个请求的数据。如果您使用的是App Engine附带的“webapp”框架(或者,实际上,大多数其他WSGI baesd框架)为每个请求实例化一个新的RequestHandler。因此,您可以在处理程序类上使用类变量来存储每个请求的数据