2010-08-12 23 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将其序列化到磁盘(如果你希望数据在不同的运行之间共享)。