【问题标题】:how to increase 10min http request using taskqueue.add() in google appengine Python如何在 google appengine Python 中使用 taskqueue.add() 增加 10 分钟的 http 请求
【发布时间】:2015-12-15 07:16:21
【问题描述】:

我的 http 请求显示截止日期错误,例如您的软内存 120mb out of 12 requests 。这里我想用taskqueue.add()方法增加http请求时间10分钟。提前谢谢。

class ExportHandler(BaseHandler):
    def get(self):
        tables = []
        app_models = [m for m in dir(models.app) if not m.startswith("__")]
        admin_models = [m for m in dir(models.admin) if not m.startswith("__")]
        total = app_models+admin_models
        for mname in total:
            if mname not in REMOVE:
                label = title(mname)
                tables.append({'value':mname, 'label':label})
        fromdate = None
        todate = None
        if "fromdate" in self.request.GET:
            fdate = self.request.GET['fromdate']
            try:
                fromdate = datetime.strptime(fdate, "%m/%d/%Y")
            except Exception as e:
                pass
        if "todate" in self.request.GET:
            tdate = self.request.GET['todate']
            try:
                todate = datetime.strptime(tdate, "%m/%d/%Y")
                todate = todate+timedelta(days=1)
            except Exception as e:
                pass
        if fromdate is not None and todate is not None:
            table = self.request.GET['table']
            model_class = get_class(table, app_models, admin_models)

            model_name = model_class.__name__
            columns = model_class.properties().keys()
            query = model_class.gql("where created_date >= :1 and created_date <= :2", fromdate, todate)
            if 'date_time' in columns:
                query = model_class.gql("where date_time >= :1 and date_time <= :2", fromdate, todate)
 records = [i for i in query.run()]
            if bool(records):
                fmt = "%m/%d/%Y"
                filename = "%s_%s_%s" %(model_name, fromdate.strftime(fmt), todate.strftime(fmt))
                csvfile = self.response


                writer = csv.writer(csvfile, delimiter=",")
                writer.writerow(records[0].json().keys())

                for rec in records:

                    writer.writerow(rec.json().values())

                self.response.content_disposition = 'attachment; filename=%s.csv' % filename
                return self.response
            else:
                self.session.add_flash("No records found", key='error')                                      
        self.render_response("/admin/exportcsv/index.html", tables=tables)  

    def post(self):
        print self.request.POST
        self.render_response("/admin/exportcsv/index.html")  

【问题讨论】:

  • 无法绕过超时限制。请改用计算实例。如果这甚至是你的问题,很难说。
  • 她的代码太多了,把它减少到最低限度,你做了什么来确定时间消耗在哪里。
  • @TimHoffman 在 Appengine 后端/模块中运行任务队列怎么样?
  • 从你的问题中真的不清楚你在哪里问什么。这是当前作为任务运行还是作为前端请求运行。看起来您想增加 http 请求时间,但我无法执行任何 urlrequests。您当然可以在任务中运行它,但请记住它将异步运行并且您无法控制它何时启动,因此您必须确定如何交付 csv 文件。通过电子邮件,或将其存储在数据存储中并通过电子邮件发送链接以便可以检索它等...

标签: python google-app-engine


【解决方案1】:

听起来您遇到了“服务 Y 请求总数后超过 X MB 的软私有内存限制”错误,而不是 DeadlineExceededError。如果是这样,What is the “soft private memory limit” in GAE? 有一些指针。

Scaling your instance class 可以将您的内存限制提高到 1 GB,应该可以解决这个问题。

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2019-10-02
    • 2011-12-27
    • 2017-12-26
    • 2016-08-11
    相关资源
    最近更新 更多