使用GAE可以避免urllib2.urlopen中的60秒限制吗?

时间:2016-06-09 21:41:03

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

我正在从一个带有urllib2.urlopen的慢速服务器请求一个大小约为14MB的文件,并且花费超过60秒来获取数据,我收到了错误:

  

等待来自URL的HTTP响应时超出截止日期:   http://bigfile.zip?type=CSV

这是我的代码:

class CronChargeBT(webapp2.RequestHandler):
    def get(self):
        taskqueue.add(queue_name = 'optimized-queue', url='/cronChargeBTB')

class CronChargeBTB(webapp2.RequestHandler):
    def post(self):
        url = "http://bigfile.zip?type=CSV"

        url_request = urllib2.Request(url)
        url_request.add_header('Accept-encoding', 'gzip')

        urlfetch.set_default_fetch_deadline(300)
        response = urllib2.urlopen(url_request, timeout=300)

        buf = StringIO(response.read())
        f = gzip.GzipFile(fileobj=buf)
        ...work with the data insiste the file...

我创建了一个调用CronChargeBT的cron任务。这里是cron.yaml:

- description: cargar BlueTomato
  url: /cronChargeBT
  target: charge
  schedule: every wed,sun 01:00

它创建一个新任务并插入队列,这里是队列配置:

- name: optimized-queue
  rate: 40/s
  bucket_size: 60
  max_concurrent_requests: 10
  retry_parameters:
    task_retry_limit: 1
    min_backoff_seconds: 10
    max_backoff_seconds: 200

因为超时= 300不能正常工作,因为GAE中的60秒限制,但我认为我可以使用任务避免它...任何人都知道如何在文件中获取数据以避免此超时。

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

Cron的工作期限限制为10分钟,而不是60秒。如果您的下载失败,也许只是重试?如果从计算机下载,下载是否有效?如果您下载的服务器太慢或不稳定,那么您无法在GAE上执行任何操作。

编辑:根据https://cloud.google.com/appengine/docs/java/outbound-requests#request_timeouts,cron作业请求的最长期限为60秒。因此,你无法绕过它。