【问题标题】:Where is the best place to put one-time and every-time code in GAE/Python?在 GAE/Python 中放置一次性和每次代码的最佳位置在哪里?
【发布时间】:2012-08-26 16:36:50
【问题描述】:

我是 Google App Engine 和 Python 的新手。我无法理解有关在 Google App Engine 上运行的 Python 应用的一些基本问题。

如果我想执行代码:

  1. 对于每个传入的请求,我应该把它放在哪里?我们正在捕获会话信息,例如谁在何时查看了哪些页面,以及他们做了什么等。
  2. 应用启动时只有一次,我应该把它放在哪里?我需要初始化一些在应用程序的许多地方使用的应用程序/系统变量。在哪里放置代码以执行此操作的最佳位置?

如果有人能指出任何文档或教程来解释 GAE/Python 应用程序的最佳架构实践是什么,而无需编程基础知识,那就太好了。

【问题讨论】:

    标签: python google-app-engine webapp2


    【解决方案1】:

    问题编号 1:

    一些网络框架(Django、KAY 等)有中间件的概念。您可以创建自己的中间件,该中间件将在每个请求上执行并处理此类信息 (见:https://docs.djangoproject.com/en/dev/topics/http/middleware/

    问题 2:

    预热请求(参见:https://developers.google.com/appengine/docs/python/config/appconfig#Warmup_Requests

    虽然由于预热请求不能保证运行,但您可以放置​​一个全局变量来让实例知道它是否已“初始化”并在每次页面加载时检查该变量(这会很便宜,因为该变量将存在于内存中并且存在于请求之间)。如果未设置,则根据需要运行您的“热身”。

    【讨论】:

    • 关于中间件的想法,我尽量避免使用 Django 和类似的东西,因为我远离 SQL,而且非 SQL 解决方案看起来不太稳定。如果它有像​​ Drupal 一样强大的追随者,我更愿意使用这样的解决方案,但情况似乎并非如此。因此,如果您愿意,我将推出自己的框架。您是否知道任何描述如何构建自己的独立于 Django 之类的中间件的地方?
    • 关于预热,当你说每次页面加载时,你的意思是在 main.py 的顶部放置一些东西,还是可以在每个 .py 文件的顶部或 basehandler 函数中放置一些东西.py 文件?我真的不明白这些文件不同部分的逻辑何时真正执行。
    • 我会尝试将您的框架建立在当前有效的基础之上。 Django 可以很好地与应用程序引擎一起工作,并且像 KAY(我已经在其上构建了一个生产应用程序)这样的框架具有许多您可以利用的强大功能。也许您可以只分叉其中一个现有框架并在它们之上构建自己的功能?您可以按照您的描述在中间件类或每个 .py 文件的顶部检查预热,尽管后者是一种混乱的方式。
    • 中间件是一个 WSGI 概念,几乎每个 Python 框架都使用 WSGI。 App Engine 上有很多支持良好的框架;自己滚动几乎可以肯定是在浪费您的时间。
    • 也许我对 Google App Engine / Python 最大的失望是,似乎没有任何地方可以按类型查找各种模块的列表以及评分和评论。当我决定尝试使用 Django nonrel 时,我发现的第一件事就是来自主要支持者的告别通知。我是开放的,但我使用的是 GAE 而没有 SQL,谁能给我一些该环境的框架示例,该环境具有足够的关键数量的追随者,以确保至少在未来 5 年左右的时间内生存?感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2023-03-24
    相关资源
    最近更新 更多