使用Python请求模块时保证提示

时间:2016-12-09 10:35:21

标签: python timeout python-requests

我有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还是协同程序?

0 个答案:

没有答案