启动和停止Google App Engine后端

时间:2011-08-28 14:44:14

标签: google-app-engine backend

我阅读了Google App Engine后端文档,但我仍然无法理解如何从Python启动/停止后端(动态后端)(我猜是使用URLFetch)。

有人可以给我一个代码示例吗?后端不在应用程序的默认版本上。

2 个答案:

答案 0 :(得分:3)

使用appcfg启动和停止后端。来自the documentation

  

appcfg backends <dir> start <backend>

     

将后端状态设置为START,允许它接收HTTP请求。   驻留后端立即开始。动态后端无法启动   直到第一个用户请求到达。如果后端是没有效果的话   已经开始了。

     

appcfg backends <dir> stop <backend>

     

将后端状态设置为STOP并关闭所有正在运行的实例。   停止的后端无法接收HTTP请求;如果它收到了   请求,它返回404响应。如果是,此命令无效   后端已经停止了。

答案 1 :(得分:3)

这取决于您使用的后端类型,“Resident Backends”无法仅通过管理控制台或命令行从生产环境关闭,而“动态后端”在闲置几分钟后关闭

因此,如果您使用动态后端,您只需发送一个请求,告诉它停止它正在做什么,它将自动关闭。

http://code.google.com/intl/iw/appengine/docs/python/config/backends.html#Types_of_Backends

修改

这可行的示例:

from google.appengine.ext import webapp
from google.appengine.api import memcache
from google.appengine.ext.webapp.util import run_wsgi_app
import time

class ShutdownHandler(webapp.RequestHandler):
    def get(self):
        memcache.put('backendShutdown', True, 60)

class StartHandler(webapp.RequestHandler):
    def get(self):
        lastCheck = time.time()
        while True:
            if time.time() - 60 > lastCheck:
                stopBackend = memcache.get('backendShutdown')
                if stopBackend:
                    memcache.delete('backendShutdown')
                    break
                lastCheck = time.time()


if __name__ == '__main__':
    _handlers = [(r'/_ah/start', StartHandler),
                 (r'/backend/worker/shutdown', ShutdownHandler)] # somekind of handler for shutdown
    run_wsgi_app(webapp.WSGIApplication(_handlers))

要停止它,你会使用:

from google.appengine.api import backends, urlfetch
url = backends.get_url('worker') + '/backend/worker/shutdown'
urlfetch.fetch(url)