我正在从一个带有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秒限制,但我认为我可以使用任务避免它...任何人都知道如何在文件中获取数据以避免此超时。
非常感谢!!!
答案 0 :(得分:1)
Cron的工作期限限制为10分钟,而不是60秒。如果您的下载失败,也许只是重试?如果从计算机下载,下载是否有效?如果您下载的服务器太慢或不稳定,那么您无法在GAE上执行任何操作。
编辑:根据https://cloud.google.com/appengine/docs/java/outbound-requests#request_timeouts,cron作业请求的最长期限为60秒。因此,你无法绕过它。