mno*_*tka 4 python caching request gevent python-requests
看下面的代码:
import requests
import grequests
import requests_cache
requests_cache.install_cache('bla')
urls = [
'http://www.heroku.com',
'http://python-tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
rs = (grequests.get(u) for u in urls)
results = grequests.map(rs)
Run Code Online (Sandbox Code Playgroud)
我希望执行此操作后,我将bla.sqlite在当前目录中找到文件并执行
results = grequests.map(rs)
Run Code Online (Sandbox Code Playgroud)
因为数据将从sqlite缓存中获取,所以速度会更快。不幸的是,这是不正确的,根本没有创建文件,也没有加速。当我使用grequests insetead的请求时,一切正常。因此,问题是标题说:可以使grequest和request_cache一起工作吗?如果是的话,如何?
该requests_cache.install_cache()功能的补丁requests.Session,但你已经进口grequests,其中用于:
from requests import Session
Run Code Online (Sandbox Code Playgroud)
因此,grequests切勿使用修补的会话对象。
安装缓存后,将导入移动到:
import requests_cache
requests_cache.install_cache('bla')
import grequests
Run Code Online (Sandbox Code Playgroud)
或者,创建一个CachedSession对象并将其grequests.get()作为session参数传递给(和相关的)方法:
import grequests
import requests_cache
session = requests_cache.CachedSession('bla')
urls = [
'http://www.heroku.com',
'http://python-tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
rs = (grequests.get(u, session=session) for u in urls)
results = grequests.map(rs)
Run Code Online (Sandbox Code Playgroud)
考虑到缓存存储后端可能无法安全处理并发访问。在sqlite后端使用一个线程锁,例如,它很可能会发生冲突。
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |