14

gunicorn を使用して、gevent ワーカーを使用していくつかのフラスコおよび django アプリケーションを実行していますが、いくつか質問があります...

まず、gunicorn は自分のプロセスを fork してインスタンス化するので、標準モジュールにモンキー パッチを適用します。自分で monkey.patch_all を呼び出す必要はありません。既に完了しており、各リクエストは greenlet として実行されています。正しい?

第二に、これは重要な部分です。gunicorn-gevent によって実際にモンキー パッチが適用された機能はどれですか。gevent を使用する場合、パッチを適用する機能 (socket、patch、urllib) をいつでも選択できます。このリストを変更するにはどうすればよいですか?

たとえば、monkey.patch_all() への標準呼び出しは urllib にパッチを適用しませんか? パッチが適用されているかどうかはどうすればわかりますか? そして、gunicorn-geventにパッチを強制する方法は?

ありがとう

ジョー

4

2 に答える 2

9

初期化時に gevent ワーカーが monkey.patch_all() を呼び出すようです。

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
于 2012-08-17T20:37:16.440 に答える
0

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

まず、gunicorn はデフォルトで SyncWorkers を使用ます。構成を変更しない場合、サーバーは greenlet を使用しません。また、すべてのパッチを適用しても、gunicorn はデフォルトで一度に 1 つのリクエストを処理するため、あまり役に立たないと思います。

次に、 GeventWorkerのソース コードを見てください。実際には、すべてモンキー パッチが適用されています。

于 2013-12-07T02:06:09.233 に答える