2012-08-17 12 views
7

私はgevent労働者を使用して、いくつかのフラスコとDjangoアプリケーションを実行するためにgunicornを使用して、いくつかの質問を持っています...まずどの機能は、ガンコーンのジエントワーカーによってパッチされたサルですか?

は、私がgunicornフォークとは、私のプロセスをインスタンス化するので、それはサルが標準モジュールにパッチを適用すると仮定します私はmonkey.patch_allを自分で呼び出す必要はありません。それはすでに私のために行われており、それぞれのリクエストはグリーンレットとして実行されています、それは正しいのですか?

第二に、これは重要な部分ですが、これは実際にはgunicorn-geventによって猿のパッチが当てられていますか? geventを使用すると、いつパッチを当てるかを選択することができます(ソケット、パッチ、urllib)... 問題は、これらの機能のどれが本当に猿のパッチになっているのですか? このリストを変更するにはどうすればよいですか?

例えば、monkey.patch_all()への標準呼び出しはurllibにパッチを当てませんか? パッチが適用されているかどうかはどうすればわかりますか? gunicorn-geventにパッチを当てる方法を教えてください。 gevent労働者は、それが初期化されるmonkey.patch_all()を呼び出すように

おかげ

ジョー

答えて

5

が見えます。

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/ggevent.py#L45

ときにアプリの起動あなたはまだ、独自の初期化コードを呼び出すことができます。

フラスコでは、私はガンコーンパスターを使用します。

my_app.ini:

[app:main] 
use = egg:mypackage#myapp 
# app config goes here 

[server:main] 
use = egg:gunicorn#main 
# you can put gunicorn config options here 

あなたのパッケージでsetup.py:

entry_points={ 
    'paste.app_factory': [ 
     'myapp = mypackage.module:app_factory' 
    ] 

例mypackageと/ module.py:

def app_factory(global_config, **config): 
    # initialization code/gevent monkey patch goes here 
    # also you can assemble your wsgi stack. 
    # then return your flask app 
    return app 

は今、あなたはそれを実行することができます:

gunicorn_paster my_app.ini 
+0

こんにちは、チップのおかげで、それはデフォルトではurllibにパッチを当てていないpatch_all()を呼び出すので、どのように私は初期化時にそれをパッチすることができますか?パッチが当てられているものとされていないものを判断する方法はありますか?ありがとう – Joseph

+0

実際はそうではありませんが、その後の猿のパッチは大丈夫です。 – gwik

+0

ok、いくつかのオフトピックの質問:なぜgunicornパターですか?そのメリットは何ですか?おかげで – Joseph

1

私はまったくの質問に答えており、それがあなたの問題を解決するかもしれません。
は、この質問を参照してください:Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

はまず、gunicornはデフォルトとしてSyncWorkersを使用して、設定を変更しない場合、サーバーはgreenletsを使用しません。そしてあなたがサルのパッチをすべて送っても、ガンコンがデフォルトで一度に1つのリクエストを処理するので、あまり役に立ちません。

第2に、GeventWorkerのソースコードを見て、それは実際にはすべて猿パッチです。

関連する問題