【问题标题】:Python main.py only initiated/called on file-changePython main.py 仅在文件更改时启动/调用
【发布时间】:2017-03-06 18:25:09
【问题描述】:

我正在使用在 Google App Engine SDK 上本地运行的 Flask 构建一个应用程序。出于某种原因,我的入口点 main.py 只启动了一次。

main.py

from bootstrap import myapp

app = myapp.bootstrap()

print "I'm bootstrapping"

if __name__ == '__main__':
    app.run()

myapp/bootstrap.py

返回 MyApp.Application 的一个实例

myapp/Application.py

扩展 Flask,注册路由,...

控制台输出:

INFO 2016-10-24 20:02:10,807 module.py:788] 默认值:“GET / HTTP/1.1”200 12
INFO 2016-10-24 20:02:11,595 module.py:788] 默认值:“GET / HTTP/1.1”200 12
INFO 2016-10-24 20:02:20,137 module.py:402] [默认] 检测到的文件更改:
./main.py
我正在引导
INFO 2016-10-24 20:02:22,199 module.py:788] 默认值:“GET / HTTP/1.1”200 12
INFO 2016-10-24 20:02:28,206 module.py:788] 默认值:“GET / HTTP/1.1”200 12

请求被正确处理,并且每次都会调用路由函数。另一方面,main.py 仅加载一次,并且仅在文件更改时才重新加载(从日志中可以看到)。似乎整个应用程序被启动一次并被缓存。

另外:您在路由方法中分配给应用程序实例的值也被“缓存”并在进一步的请求中可用(这看起来很奇怪)。

这种行为在 Python 中正常吗?还是这种行为特定于 Google App Engine?

【问题讨论】:

  • 这是正常行为。应用程序实例继续运行,appengine 基础设施将向可用实例发送请求。我建议您阅读沙盒的工作原理。
  • @TimHoffman:当您发表评论时,我正在输入我的答案。您的评论确实描述了我的问题。谢谢。

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


【解决方案1】:

感谢一位同事,我找到了问题所在。
我有 PHP 背景,目前正在改进我的 Python。在 PHP 中,每个请求都完全从头开始构建应用程序。另一方面,在 Python 中,您的应用程序会启动一次并继续运行。请求将由同一个正在运行的实例处理。

所以在我的情况下,应用程序启动一次,打印"I'm bootstrapping"。在文件更改时,应用程序由于更改而重新启动。进一步的请求将由具有相同属性的同一个正在运行的应用程序处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2020-07-30
    • 1970-01-01
    • 2012-06-25
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多