我有Python应用程序,它使用线程和请求模块来处理许多页面。页面下载的基本功能如下所示:
def get_page(url):
error = None
data = None
max_page_size = 10 * 1024 * 1024
try:
s = requests.Session()
s.max_redirects = 10
s.keep_alive = False
r = s.get('http://%s' % url if not url.startswith('http://') else url,
headers=headers, timeout=10.0, stream=True)
raw_data = io.BytesIO()
size = 0
for chunk in r.iter_content(4096):
size += len(chunk)
raw_data.write(chunk)
if size > max_page_size:
r.close()
raise SpyderError('too_large')
fetch_result = 'ok'
finally:
del s
在大多数情况下它运行良好,但有时由于与某些服务器的连接速度很慢或某些其他网络问题导致应用程序冻结。如何为整个功能设置全局保证超时?我应该使用asyncio还是协同程序?