我的GAE服务器在尝试将大文件发送到EC2 REST服务器时出现timeout
错误。我发现Backends
Python API对我的示例来说是一个很好的解决方案,但我在配置时遇到了一些问题。
按照一些说明,我在项目文件夹中添加了一个简单的backends.yaml
。但我仍然收到以下错误,似乎我无法创建后端实例。
File "\Google\google_appengine\google\appengine\api\background_thread\background_thread.py", line 84, in start_new_background_thread
raise ERROR_MAP[error.application_error](error.error_detail)
FrontendsNotSupported
以下是我的代码,我的问题是:
OutputPage.py
出现超时错误,如何让这个脚本在后端实例上运行?根据Jimmy Kane的建议,我为后端实例创建了一个新脚本przm_batchmodel_backend.py
。在盯着我的GAE后,现在我有两个端口(默认和后端)运行我的网站。这是对的吗?
- url: /backend.html
script: przm_batchmodel.py
backends:
- name: mybackend
class: B1
instances: 1
options: dynamic
from przm import przm_batchmodel
from google.appengine.api import background_thread
class OutputPage(webapp.RequestHandler):
def post(self):
form = cgi.FieldStorage()
thefile = form['upfile']
#this is the old way to initiate calculations
#html= przm_batchmodel.loop_html(thefile)
przm_batchoutput_backend.przmBatchOutputPageBackend(thefile)
self.response.out.write(html)
app = webapp.WSGIApplication([('/.*', OutputPage)], debug=True)
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
class BakendHandler(webapp.RequestHandler):
def post(self):
t = background_thread.BackgroundThread(target=przm_batchmodel.loop_html, args=[thefile])
t.start()
app = webapp.WSGIApplication([('/backend.html', BakendHandler)], debug=True)
答案 0 :(得分:1)
您需要为后端创建应用程序'文件'/脚本才能工作。就像你对主要做的一样。
类似于:
的app.yaml
- url: /backend.html
script: przm_batchmodel.py
和przm_batchmodel.py
class BakendHandler(webapp.RequestHandler):
def post(self):
html = 'test'
self.response.out.write(html)
app = webapp.WSGIApplication([('/backend.html', OutputPage)], debug=True)
我是否还建议您使用更易于设置的新功能modules?
由于评论,修改
可能设置不是你的问题。
来自docs
在后端运行的代码可以启动后台线程,即一个线程 可以“生出”产生它的请求。它们允许后端实例 执行任意定期或计划任务或继续 请求返回给用户后在后台工作。
您只能在后端使用backgroundthread
。
再次编辑。移动代码的一部分:
t = background_thread.BackgroundThread(target=przm_batchmodel.loop_html, args=[thefile])
t.start()
self.response.out.write(html)
到后端应用