2012-02-24 9 views
0

私はそれらのそれぞれが1つ下の内部で呼び出すことを、3つの機能を持っているの設計:は、関節機能

  • GetBitrateOverHTTPを
  • はGetFilesizeOverHTTP
  • Is_ServerSupportHTTPRangeは

は、各関数は、HTTPを使用していますリクエストはそれ自身です。つまり、最後の関数は単一のHTTP要求のみを使用し、最初の関数は3つを使用します。

GetBitrateOverHTTP関数はビットレートのみを返します。

これらの関数は単独で問題なく動作しますが、今は特定のURLの3つの出力をすべて取得したいと考えています。

私は考えた:すべての関数を呼び出す

  1. 。問題は、3つではなく6つのHTTPリクエストを作成することです。
  2. 関数の定義を変更して他のものも返しますが、関数の基本目的を果たさない - それが意味するものを返す復帰する。
  3. これらの定義を使用しない別の関数を定義しますが、既にコード化されたものを再度定義することは賢明ではありません。

ヘルプがありますか?これらの線に沿って

+1

を解決しましたディレクティブ...もっと良いデザインは、3つすべてを返すGetFileInformation()でしょうか? – Cameron

答えて

0

class RemoteFile(...): 

    ... 

    def getInfo(self): 
     resp = self._do_that_http_request(self.remotepath) 
     return RemoteFileInfo(resp) 


class RemoteFileInfo(...): 

    def __init__(self, resp): 
      self.bitrate = self._getbitrate(resp) 
      self.filesize = self._getfilesize(resp) 


    ... 

ので、私は、キャッシングのオプションを実装しました。ダミーファイルを作成してインポートしました。 は、それから私は、各関数の先頭で使用:

if hasattr(dummy, 'GetFileSize_cache'): 
    if dummy.GetFileSize_cache.has_key(url): 
     return dummy.GetFileSize_cache[url] 
    else: 
     dummy.GetFileSize_cache = {} 

とちょうどリターンの前に:

dummy.GetFileSize_cache[url] = file_size 

問題は、あなたが適切なキャッシュを設定することができクイックフィックスとして、まあ:)

0

何か:

関連する問題