gpt4 book ai didi

python - Google App Engine 应用程序缓存

转载 作者:行者123 更新时间:2023-11-30 23:37:57 25 4
gpt4 key购买 nike

在Google应用程序引擎中,我创建了自己的用户API,适本地称为用户,因此它不会干扰Google应用程序引擎API用户。与大多数多用户网站一样,该网站的两个“版本”可供用户使用,具体取决于用户是否登录。因此,使用以下代码创建了一个名为 router.py 的文件

import webapp2

from lib import user
import guest
import authorized

if user.isLoggedIn():
app = webapp2.WSGIApplication(authorized.WSGIHandler,debug=True)
else:
app = webapp2.WSGIApplication(guest.WSGIHandler,debug=True)

guestauthorized 模块的格式与传统应用程序脚本类似:

import webapp2
import os

class MainPage(webapp2.RequestHandler):
def get(self,_random):
self.response.out.write('authorized: '+_random)

WSGIHandler = [('/(.*)', MainPage)]

因此,路由器文件可以通过从 guest 模块或授权模块中获取 WSGIHandler 变量来轻松选择要使用的 WSGIApplication url Controller 。但是,用户必须关闭路由器的所有选项卡才能检测 isLoggedIn() 函数中的更改。如果您登录,则在关闭每个选项卡之前,它不会识别您已登录。我有两个可能的原因:

  1. isLoggedIn() 使用 os.environ['HTTP_COOKIE'] 检索 cookie 并查看用户是否登录,然后根据数据库检查 cookie 数据以确保它们是有效的cookie。可能会出现错误,即页面刷新时服务器端的 cookie 没有刷新?也许是因为我没有从 self.request 获取 cookie。

  2. 是否有可能为了节省前端时间或谷歌应用程序引擎将来自服务器的脚本缓存在服务器的内存缓存中?我对此表示怀疑,但我对这种行为的原因感到困惑。

提前感谢您的帮助

编辑

经过更多测试,我发现 router.py 文件响应正确,并在添加评论时引导用户登录。这似乎表明缓存。

编辑2

我发现了有关 WSHI 申请的更多信息:

The Python runtime environment caches imported modules between requests on a single web server, similar to how a standalone Python application loads a module only once even if the module is imported by multiple files. Since WSGI handlers are modules, they are cached between requests. CGI handler scripts are only cached if they provide a main() routine; otherwise, the CGI handler script is loaded for every request.

我想知道以某种方式刷新 WSGI 模块的效率如何。这无疑会给服务器带来负担,但解决了我的问题。同样,这似乎是一个部分解决方案。

编辑3

同样,任何在 router.py 文件中随机化注释的尝试都是无效的。查找用户登录的 id 语句完全被忽略,并且 WSGIApplication 设置为其原始状态。我还不确定这是由于 webapp2 模块中的模块缓存还是由于用户 API 上的模块缓存所致。我怀疑是后者。

最佳答案

问题不在于“缓存”,而在于 WSGI 应用程序的工作方式。 WSGI 进程会在相当长的一段时间内保持事件状态,并在此期间为多个请求提供服务。 app 在该进程启动时定义,并且在进程更新之前不会更改。此时您不应该尝试做任何动态的或依赖于请求的事情。

关于python - Google App Engine 应用程序缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com