Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在app engine中创建一个作用域为单个请求的变量?_Python_Google App Engine - Fatal编程技术网

Python 如何在app engine中创建一个作用域为单个请求的变量?

Python 如何在app engine中创建一个作用域为单个请求的变量?,python,google-app-engine,Python,Google App Engine,我正在为googleappengine创建一个python应用程序,我遇到了一个性能问题,一些昂贵的操作在单个请求中重复。为了帮助解决这个问题,我想创建一种小型缓存,其作用域为单个请求。这与会话范围或应用程序范围的缓存相反,这两种缓存对于我的特定问题都没有意义 我原以为我可以使用python全局或模块级变量来实现这一点,但事实证明,这些变量以不明显的方式在请求之间维护它们的状态 我也不认为memcache有意义,因为它是应用程序范围的 我还没有在谷歌的文档中找到一个很好的答案。也许这是因为它要么

我正在为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。因此,您可以在处理程序类上使用类变量来存储每个请求的数据