在Google App Engine上使用async urlfetch启动后端

时间:2012-12-18 16:42:27

标签: python google-app-engine asynchronous backend urlfetch

我正在尝试GAE的几个功能。

我已经构建了一个动态后端,但我遇到了一些问题,让这个东西工作没有任务队列

后端代码:

class StartHandler(webapp2.RequestHandler):

    def get(self):
    #... do stuff...    

if __name__ == '__main__':
    _handlers = [(r'/_ah/start', StartHandler)]
    run_wsgi_app(webapp2.WSGIApplication(_handlers))

后端是动态的。因此,无论何时收到呼叫,它都会执行此操作,然后停止。

当我在处理程序中使用时,一切都很好了:

url = backends.get_url('worker') + '/_ah/start'
urlfetch.fetch(url)

但是我希望此调用是 async ,因为后端可能需要10分钟才能完成它的工作。

所以我将上面的代码更改为:

url = backends.get_url('worker') + '/_ah/start'
rpc = urlfetch.create_rpc()
urlfetch.make_fetch_call(rpc, url)

然后后端没有启动。我对完成请求或从中获取任何数据不感兴趣。

我错过了什么 - 实施错误?

谢谢大家

1 个答案:

答案 0 :(得分:2)

在不调用rpc对象的get_result()的情况下使用RPC进行异步调用将不会限制将调用urlfetch。一旦您的代码退出,未完成的待处理异步调用将被中止。

使处理程序异步的唯一方法是将代码排入推送队列。