3

こんにちは、私はエンド ユーザー向けの情報を検索するサイトを持っています。このサイトは Python で書かれており、いくつかの urlopen コマンドが必要です。その結果、ページの読み込みに少し時間がかかります。もっと速くする方法はないかと思っていました。キャッシュする簡単な Python の方法や、urlopen スクリプトを楽しくする方法はありますか?

urlopens は価格を取得するために Amazon API にアクセスするため、サイトはある程度最新である必要があります。私が考えることができる唯一のオプションは、スクリプトを作成して mySQL データベースを作成し、それを時々実行することですが、それは面倒です。

ありがとう!

4

5 に答える 5

3

httplib2 は、http 要求のキャッシングを理解し、urllib/urllib2 の乱雑さをいくらか抽象化し、gzip のサポートなどの他の機能を備えています。

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

しかし、それを使用してデータを取得する以外に、データセットがそれほど大きくない場合は、何らかの関数のキャッシュ/メモ化も実装します。例: http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize

そのデコレーターを変更して、時間ベースの有効期限を許可することはそれほど難しくありません。たとえば、15 分間だけ結果をキャッシュします。

結果が大きい場合は、memcached/redis の調査を開始する必要があります。

于 2010-08-12T13:49:07.373 に答える
1

できることはいくつかあります。

  • urllibキャッシュ メカニズムは一時的に無効になっていますが、Amazon から取得したデータをメモリまたはファイルのどこかに保存することで、簡単に独自のロールを作成できます。

  • 上記と同様に、価格を頻繁に更新する別のスクリプトを作成し、cronそれを 30 分ごとに (たとえば) 実行することができます。これらはどこにでも保管できます。

  • とにかくほとんど待機しているため、新しいスレッド/プロセスで URL フェッチを実行できます。

于 2010-08-12T13:46:42.200 に答える
0

価格はどのくらいの頻度で変更されますか? それらがかなり一定している場合 (たとえば、1 日に 1 回、または 1 時間ごとなど)、値を取得してデータベースやテキスト ファイル、または必要なものに保存する cron スクリプト (または同等のもの) を作成してください。 .

Amazon API からタイムスタンプ データを確認できるかどうかはわかりません。

于 2010-08-12T13:46:25.070 に答える
0

memcached を使用できます。そのために設計されており、このようにして、キャッシュをさまざまなプログラム/スクリプトと簡単に共有できます。また、Python から使用するのは非常に簡単です。以下を確認してください。

Python で使用されている python-memcache (memcached) の良い例は?

次に、キーが存在せず、cron スクリプトからも memcached を更新すると、準備完了です。

別のより簡単なオプションは、独自のキャッシュをクックすることです。おそらく、データを辞書に保存するか、cPickle を使用してディスクにシリアル化します (異なる実行間でデータを共有する場合)。

于 2010-08-12T13:50:16.793 に答える
0

一度に複数のサイトから取得する必要がある場合は、非同期コアhttp://docs.python.org/library/asyncore.htmlを試すことができます

これにより、一度に複数のページを簡単にロードできます。

于 2010-08-12T13:55:47.203 に答える