gae很长时间计算mapreduce 500错误python

时间:2016-03-10 14:18:48

标签: python-2.7 google-app-engine mapreduce google-app-engine-python

我有一个代码可以处理GAE,但我正在努力解决500错误,这看起来像是因为漫长的等待(运行)时间。

我正在做以下事情:

  1. 阅读用户提供的信息
  2. 运行一些mapreduce方法来计算一些统计数据并将其作为电子邮件发送
  3. (重新)将用户引导至感谢页面,因为结果将通过电子邮件发送
  4. 代码在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)
    

1 个答案:

答案 0 :(得分:0)

mapreduce的重点在于它可以脱机运行,只要有必要就可以完成任务。它试图在你的处理函数中运行它,从而击败了整个目的。

相反,mapreduce任务本身应该在send_results_as_email方法产生结果后调用它。