我有一个代码可以处理GAE,但我正在努力解决500错误,这看起来像是因为漫长的等待(运行)时间。
我正在做以下事情:
代码在App引擎SDK上运行正常,因为没有时间限制。但是,当我在GAE上运行代码时,我一直收到500错误。如果我不在步骤2中执行计算,则代码将再次运行(重定向到新页面并发送电子邮件)。我尝试在第3步之后执行第2步,但仍然遇到同样的错误。
有没有简单的方法来解决这个问题?我正在考虑获取用户信息,让他们知道结果将通过电子邮件发送给他们或将其重定向到主页面。在此期间(或之后)我可以在后端运行mapreduce并通过电子邮件发送完成的结果,因此时间限制不会中止我的代码。
class Guestbook(webapp2.RequestHandler):
def post(self):
#get info provided in form by user (code not shown here)
# send them to new page or main page
self.response.write('<html><body>You wrote:<pre>')
self.response.write("thanks")
self.response.write('</pre></body></html>')
#self.redirect('/')
dump_content = 'Error'
try:
dump_content = long_time_taking_mapreduce_method(user_given_info)
except DeadlineExceededError:
logging.warning("Deadline error")
send_results_as_email(OUTPFILE, dump_content)
app = webapp2.WSGIApplication([
('/', MainPage),
('/sign', Guestbook),
], debug=True)
答案 0 :(得分:0)
mapreduce的重点在于它可以脱机运行,只要有必要就可以完成任务。它试图在你的处理函数中运行它,从而击败了整个目的。
相反,mapreduce任务本身应该在send_results_as_email
方法产生结果后调用它。