【发布时间】:2014-02-14 02:31:14
【问题描述】:
我的 webapp 有两个部分:
-
GAE服务器处理 Web 请求并将它们发送到EC2 REST服务器 -
EC2 REST服务器,根据 GAE 提供的信息进行所有计算并返回结果
计算简单时效果很好。否则,我会在 GAE 端出现 timeout 错误。
我意识到这个timeout 问题有一些方法。但经过一番研究,我发现(如果我错了,请纠正我):
-
taskqueue不符合我的需求,因为某些计算可能需要半个小时以上。 - “GAE 后端实例”在我一直保留另一个实例时有效。但由于我已经预留了一个 EC2 实例,我想找一些“便宜”的解决方案(不同时支付 GAE 后端实例和 EC2)
- “GAE 异步请求”也不是一个选项,因为它仍在等待来自 EC2 的响应,尽管用户可以在等待时发送其他请求
下面是我的代码的一个简单案例,它要求:
- 用户上传 csv
- 解析此 csv 并将信息发送到 EC2
- 根据 EC2 的响应生成输出页面
输出页面.py
from przm import przm_batchmodel
class OutputPage(webapp.RequestHandler):
def post(self):
form = cgi.FieldStorage()
thefile = form['upfile']
#this is where uploaded file will be processed and sent to EC2 for computing
html= przm_batchmodel.loop_html(thefile)
przm_batchoutput_backend.przmBatchOutputPageBackend(thefile)
self.response.out.write(html)
app = webapp.WSGIApplication([('/.*', OutputPage)], debug=True)
przm_batchmodel.py### 这是发送信息的代码。到 EC2
def loop_html(thefile):
#parses uploaded csv and send its info. to the REST server, the returned value is a html page.
data= csv.reader(thefile.file.read().splitlines())
response = urlfetch.fetch(url=REST_server, payload=data, method=urlfetch.POST, headers=http_headers, deadline=60)
return response
此时,我的问题是:
-
GAE方面有没有办法让我直接将请求发送到EC2而无需等待其响应?如果可能的话,在 EC2 端,我可以在结果准备好时向用户发送电子邮件通知他们。 - 如果问题 1 是不可能的。有没有办法在
EC2上创建一个监视器,一旦收到来自GAE端的信息,它就会调用计算?
感谢任何建议。
【问题讨论】:
标签: python google-app-engine amazon-web-services amazon-ec2 timeout