- 23 Eyl 2016
- 2,001
- 11
Merhaba, bu gün sizlere gönderdiğiniz istekleri önbelleğe almanızı sağlayan, requests-cache kütüphanesini göstereceğim. Bu kütüphane, aynı yere aynı parametrelerle aynı request'i atıp her seferinde aynı response'ı alıyorsanız yaptığınız request'leri önbelleğe alarak performansınızı arttırabiliriz ve internet kullanımını azaltabiliriz.
Öncelikle kurulumuyla başlayalım:
veya, GitHub üzerinden de son versiyonunu kurabiliriz.
NOT: requests, urllib3 veya requests_cache kütüphanelerine gelen güncellemeler var olan önbellek veritabanını bozabilir. Bunu engellemek için bir virtual environment kullanmak veya kütüphane versiyonlarını sabitlemek daha mantıklı olabilir.
Kulanım
requests_cache, iki yolu var:
Yamalamak için, hazırdaki programa 2 satır kod eklemek yeterlidir. Tek yapmanız gereken requests_cache'i importlamak ve install_cache()'i çağırmak.
Artık requests'i hiçbir şey olmamış gibi kullanabilirsiniz. Örneğin bu örneğe bakalım, her request başına 1 saniye delay olacağından normalde 10 saniyeden fazla sürmesi gerekirdi fakat cache kullandığımız için 1-2 saniyede bitecek:
Cache ayrıca dosya adı, backend sistemi, sona erme zamanı gibi bazı seçenekler ile özelleştirilebilir. Örneğin bu örnekte cache, sqlite veritabanında 'test_cache.sqlite' adı ile ve 300 saniye sona erme süresi ile saklanacak. Bunun için kullanacağım kod:
Ayrıca, eğer requests'i yamaladıysak bunu requests_cache.uninstall_cache() ile kaldırabilir veya eğer tamamen kaldırmayıp da birkaç requestliğine kapatmak istersek requests.cache.disabled() context managerını kullanarak geçici olarak devre dışı bırakabiliriz.
Ayrıca eğer bir requestin cacheden mi yapıldığını anlamak için from_cache attribute'ünü kullanabiliriz. Bu True ise cacheden alınmış demektir.
Depolama Seçenekleri
Bu kütüphane, varsayılan olarak sqlite kullansana da bunu değiştirebiliriz. install_cache()'i çağırırken backend argümanı belirlersek bu değişecektir. Kullanabileceğiniz backend sistemleri şunlar:
Öncelikle kurulumuyla başlayalım:
Kod:
pip install --upgrade requests-cache
veya, GitHub üzerinden de son versiyonunu kurabiliriz.
Kod:
git clone git://github.com/reclosedev/requests-cache.git && cd requests-cache
python setup.py install
NOT: requests, urllib3 veya requests_cache kütüphanelerine gelen güncellemeler var olan önbellek veritabanını bozabilir. Bunu engellemek için bir virtual environment kullanmak veya kütüphane versiyonlarını sabitlemek daha mantıklı olabilir.
Kulanım
requests_cache, iki yolu var:
- requests.Session yerine CachedSession kullanmak.
- requests'i CachedSession kullanması için yamalamak
Yamalamak için, hazırdaki programa 2 satır kod eklemek yeterlidir. Tek yapmanız gereken requests_cache'i importlamak ve install_cache()'i çağırmak.
Kod:
import requests
[COLOR="Red"]import requests_cache[/COLOR]
[COLOR="red"]requests_cache.install_cache()[/COLOR]
Artık requests'i hiçbir şey olmamış gibi kullanabilirsiniz. Örneğin bu örneğe bakalım, her request başına 1 saniye delay olacağından normalde 10 saniyeden fazla sürmesi gerekirdi fakat cache kullandığımız için 1-2 saniyede bitecek:
Kod:
for i in range(10):
requests.get('http://httpbin.org/delay/1')
Cache ayrıca dosya adı, backend sistemi, sona erme zamanı gibi bazı seçenekler ile özelleştirilebilir. Örneğin bu örnekte cache, sqlite veritabanında 'test_cache.sqlite' adı ile ve 300 saniye sona erme süresi ile saklanacak. Bunun için kullanacağım kod:
Kod:
requests_cache.install_cache('test_cache', backend='sqlite', expire_after=300)
Ayrıca, eğer requests'i yamaladıysak bunu requests_cache.uninstall_cache() ile kaldırabilir veya eğer tamamen kaldırmayıp da birkaç requestliğine kapatmak istersek requests.cache.disabled() context managerını kullanarak geçici olarak devre dışı bırakabiliriz.
Kod:
with requests_cache.disabled():
print(requests.get('http://httpbin.org/ip').text)
Ayrıca eğer bir requestin cacheden mi yapıldığını anlamak için from_cache attribute'ünü kullanabiliriz. Bu True ise cacheden alınmış demektir.
Kod:
>>> import requests
>>> import requests_cache
>>> requests_cache.install_cache()
>>> requests_cache.clear()
>>> r = requests.get('http://httpbin.org/get')
>>> r.from_cache
False
>>> r = requests.get('http://httpbin.org/get')
>>> r.from_cache
True
Depolama Seçenekleri
Bu kütüphane, varsayılan olarak sqlite kullansana da bunu değiştirebiliriz. install_cache()'i çağırırken backend argümanı belirlersek bu değişecektir. Kullanabileceğiniz backend sistemleri şunlar:
- sqlite - sqlite veritabanı (Varsayılan)
- memory - bir dict içinde saklar, kalıcı değildir
- mongodb - (deneysel) mongodb veritabanı (pymongo < 3.0 gereklidir)
- redis - tüm veriyi bir redis data store'da saklar (redis gereklidir)