Я использую urllib2 для Google App Engine (GAE) на python. Очень часто приложение вылетает из-за следующей ошибки:
Превышен крайний срок при ожидании ответа HTTP от URL: ....
Источник выглядит так:
import webapp2
import urllib2
from bs4 import BeautifulSoup
def functionRunning2To5Seconds_1()
#Check if the Url could be parsed
try:
url ="http://...someUrl..."
req = urllib2.Request(url,headers={'User-Agent': 'Mozilla/5.0'})
page = urllib2.urlopen(req)
htmlSource = BeautifulSoup(page)
except Exception e:
logging.info("Error : {er}".format(er=str(e)))
#do some calculation with the data of htmlSource, which takes 2 To 5 Seconds
#and the handler looks like:
class xyHandler(webapp2.RequestHandler):
def post(self, uurl=None):
r_data1 = functionRunning2To5Seconds_1()
r_data2 = functionRunning2To5Seconds_2()
r_data3 = functionRunning2To5Seconds_3()
...
#show the results in a web page
Я нашел этот документ, в котором говорится:
Вы можете использовать стандартные библиотеки Python urllib, urllib2 или httplib для выполнения HTTP-запросов. При работе в App Engine эти библиотеки выполняют HTTP-запросы с помощью службы получения URL-адресов App Engine.
и это:
Вы можете установить крайний срок для запроса, максимальное количество времени, в течение которого служба будет ждать ответа. По умолчанию крайний срок получения составляет 5 секунд. Максимальный крайний срок составляет 60 секунд для HTTP-запросов и 60 секунд для запросов очереди задач и заданий cron.
Итак, КАК мне это сделать? Как установить тайм-аут на urllib2?
Или мне нужно переписать все приложение, чтобы использовать службу получения URL-адресов App Engine?
(PS: Кто-нибудь знает безопасный способ параллельного выполнения вызовов "r_data1 = functionRunning2To5Seconds _... ()"?)