2017-02-21 7 views
2

私はMaxMindのGeoIPデータベースにpythonラッパー 'geoip2'を使用しています。ドキュメントを読むと、データベースを開くのは非常に高価なので、データベースリーダーを1つだけ作成しなければならないと言われています。もちろん、リクエストごとに開くことは非常に悪い考えです。MaxMind GeoIP2 Djangoのシングルインスタンス

サーバーにDjango(1.10)+ Gunicornがある場合、データベースリーダーの "シングルトン"をどのように作成する必要がありますか?これは、一般的にgeoip2モジュールに関する質問はありませんが、それはについての質問です:

  1. にはどうすればアプリ(ない プロジェクト全体)からアクセスでき、単一のオブジェクトを作成する必要がありますか? __init__os.environ['APP_VAR_WHATEVER'] = InitObject()でこれをどうすればよいですか?

  2. 残念ながら、私はGunicornについてよく分かりませんので、2番目の 質問は、どのくらい労働者が生きていますか? N 分/秒ごとに再起動していますか? が労働者をあまりにも頻繁に呼びかけるのであれば、望ましくない追加の システム負荷が発生することになるので、私はこの質問をしています。

答えて

2
  1. あなたが述べたように、あなたはより速く(例えば、照会する安価なクエリを作成するために、メモリ内のデータベースをキャッシュしなければならない唯一のデータベースリーダーを持っているために、シングルトンパターンを実装することができますデータベースオブジェクトではなく辞書です)。
  2. 作業者が数秒間(デフォルトは30秒)以上アクティブではないが、作業者が長い間サイレント状態を維持し、頻繁に再起動したくない場合は、timeoutの値を設定することができます。ここで

http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.htmlはシングルトンパターンの役に立つ例です

関連する問題