2010-08-12 30 views
3

嘿所有,我有一個網站,查找最終用戶的信息,是用Python編寫的,並需要幾個urlopen命令。因此,頁面加載需要一些時間。我想知道是否有辦法讓它更快?有沒有一種簡單的Python緩存方法或最後讓urlopen腳本變得有趣的方法?Python中的緩存選項或加速urlopen

urlopens訪問亞馬遜API獲取價格,所以該網站需要有點更新。我能想到的唯一選擇是創建一個腳本來製作一個mySQL數據庫並且不時地運行它,但那會是一個麻煩事。

謝謝!

回答

0

價格多久改變一次?如果它們非常穩定(比如說每天一次,或者每隔一小時左右),那麼就直接寫一個cron腳本(或者相當於它)來檢索這些值並將其存儲在數據庫或文本文件中或者任何你需要的。

我不知道你是否可以從Amazon API檢查時間戳數據 - 如果他們報告那種事情。

+0

謝謝韋恩!我遇到的唯一問題是,有時候我得到了urlopen的超時錯誤。有沒有辦法可以確保這不會發生? – 2010-08-12 13:49:31

0

你可以做幾件事情。

  • urllib緩存機制temporarily disabled,但你可以很容易地通過存儲你從亞馬遜獲得在內存或文件中的某個地方數據滾你自己。

  • 與上面類似,您可以有一個單獨的腳本,每隔一個小時就會刷新一次價格,並且每半小時運行一次(比如說)。這些可以存儲在任何地方。

  • 您可以在新的線程/進程中運行URL獲取,因爲它主要是等待。

3

httplib2理解HTTP請求緩存,摘要的urllib/urllib2的的有點混亂,有其他物品,如gzip的支持。

http://code.google.com/p/httplib2/

但是,除了使用獲得的數據,如果數據集不是非常大,我也將實現某種功能的緩存/ memoizing的。例如: http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize

修改裝飾器以允許基於時間的過期,只緩存結果15分鐘。

如果結果較大,則需要開始查看memcached/redis。

+0

獲取的數據只是一個XML文件,所以它不是太大。它只需要很長的時間來加載一些原因:( – 2010-08-12 14:20:10

+0

然後,http緩存應該工作正常,只要數據不會在第三方服務器上不斷變化。 – adamJLev 2010-08-12 17:51:48

0

您可以使用memcached。它是專門爲此設計的,這樣您就可以輕鬆地使用不同的程序/腳本共享緩存。它是很容易從Python的使用,檢查:

Good examples of python-memcache (memcached) being used in Python?

當一個鍵不存在,也從一些cron的腳本,然後你更新的memcached,你準備好去。

另一個更簡單的選擇是烹飪你自己的緩存,可能將數據存儲在字典中和/或使用cPickle將其序列化到磁盤(如果你希望數據在不同的運行之間共享)。