LoginSignup
1
1

More than 5 years have passed since last update.

uwsgi-geventモードでuwsgiサーバーを動かす

Posted at

http://uwsgi-docs.readthedocs.io/en/latest/Gevent.html?highlight=gevent
を見つつ、uwsgiをgeventモードで動かしてみます。

環境

nginx: 1.10.1
python: 2.7.10
uwsgi: 2.0.13.1
ローカル構築なのでnginx-uwsgiはUnixドメインソケットで通信します。

uwsgi設定

geventパラメータを追加

uwsgi.ini
[uwsgi]
...
gevent = 40

ここの値はgeventのworker数ですが、最適な値はわかりません。
(誰か教えてほしい)

MySQLモジュール

MySQLコネクタはMySQLPythonだとgeventが対応していないらしいです。
PyMySQLを使います。
また、Djangoを使う場合はPyMySQLをそのまま使うとバックエンドの実装とかみ合わないので起動時に、

import pymysql
pymysql.install_as_MySQLdb()

を実行する必要があります。

モンキーパッチ

uwsgiの起動モジュールの先頭で、

import gevent.monkey
gevent.monkey.patch_all()

でモンキーパッチを当てる。
(他のインポートの前に実行されるように)
uwsgi.ini内で、gevent-monkey-patch = true でもいけるらしいですが、
手元の環境ではMySQL周りでエラーが出てしまいダメでした。
おそらく内部のインポートの順序の関係かと。

実行

通常通りuwsgi実行して、

*** running gevent loop engine [addr:0x10e228440] ***

のようなメッセージが表示されればgeventモードで起動成功です。
あとはHTTPリクエストしてみてエラーが出なければOK。

起動してみて

geventなしとイマイチ違いが実感しにくい(ローカルだからか)です。
パラメータの値も最適値がまだまだわからないので色々試して検証します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1