首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌应用引擎dev_appserver.py如何在不重启的情况下提供新鲜内容?

谷歌应用引擎dev_appserver.py如何在不重启的情况下提供新鲜内容?
EN

Stack Overflow用户
提问于 2011-05-13 09:55:05
回答 2查看 524关注 0票数 5

我喜欢Google App Engine开发环境的一个原因是,我不必在每次更改任何python源文件、其他静态文件甚至配置文件时都重新启动服务器。它毁了我,当我使用其他服务器环境(tornadoweb、web.py、node.js)时,我忘记重新启动服务器。

有人能解释一下GAE是怎么做到的吗?让其他服务器(至少是基于python的)实现同样的功能有多难?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-13 13:04:03

您可以查看dev_appserver.py(link)的源代码。看起来像是ModuleManager复制了sys.modules,并监视每个模块以跟踪基于时间的更改:

代码语言:javascript
复制
class ModuleManager(object):
  """Manages loaded modules in the runtime.

  Responsible for monitoring and reporting about file modification times.
  Modules can be loaded from source or precompiled byte-code files.  When a
  file has source code, the ModuleManager monitors the modification time of
  the source file even if the module itself is loaded from byte-code.
  """

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/dev_appserver.py#3636

票数 3
EN

Stack Overflow用户

发布于 2011-05-13 11:26:31

许多see服务器,如GAE,都使用python reload模块来查看代码更改的效果,而无需重新启动服务器进程。

代码语言:javascript
复制
import something

if is_changed(something)
   somthing = reload(something)

引用自python文档:当执行reload(模块)时:

Python模块的代码被重新编译,模块级代码被重新执行,定义了一组新的对象,这些对象被绑定到模块的字典中的名称。不会第二次调用扩展模块的init函数。

与Python中的所有其他对象一样,旧对象只有在其引用计数降为零后才会被回收。

模块命名空间中的名称将更新为指向任何新的或更改的对象。对旧对象的其他引用(如模块外部的名称)不会重新绑定为引用新对象,如果需要,必须在出现新对象的每个命名空间中进行更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5986500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档