[解決済み] PyMongo 3でServerSelectionTimeoutErrorが発生するのはなぜですか?
質問
使っています。
- Python 3.4.2
- PyMongo 3.0.2
- mongod 2.6.9が動作するmongolab
- uWSGI 2.0.10
- CherryPy 3.7.0
- nginx 1.6.2
uWSGI の開始パラメータです。
--socket 127.0.0.1:8081 --daemonize --enable-threads --threads 2 --processes 2
MongoClientを1回だけセットアップしました。
self.mongo_client = MongoClient('mongodb://user:[email protected]:port/mydb')
self.db = self.mongo_client['mydb']
JSONのdictをMongoDBに保存してみる。
result = self.db.jobs.insert_one(job_dict)
mongodbへの同じコードパスを実行するユニットテストを経由して動作します。 しかし、CherryPyとuWSGI経由でHTTP POSTを使用して実行すると、次のようになります。
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
CherryPyやuWSGI経由で実行すると、なぜこのような挙動になるのでしょうか? これはおそらくPyMongo 3での新しいスレッドモデルですか?
更新しました。
CherryPyの組み込みサーバを使ってuWSGIとnginxを使わずに実行すると
insert_one()
が動作します。
1/25 4:53pm EST を更新しました。
PyMongoでデバッグを追加した結果、どうやら
topology._update_servers()
は、サーバー 'myserver-a.mongolab.com' の server_type = 2 であることを知っています。 しかし
server_description.known_servers()
は、サーバー 'myserver.mongolab.com' の server_type = 0 になっています。
その結果、以下のようなスタックトレースが発生します。
result = self.db.jobs.insert_one(job_dict)
File "/usr/local/lib/python3.4/site-packages/pymongo/collection.py", line 466, in insert_one
with self._socket_for_writes() as sock_info:
File "/usr/local/lib/python3.4/contextlib.py", line 59, in __enter__
return next(self.gen)
File "/usr/local/lib/python3.4/site-packages/pymongo/mongo_client.py", line 663, in _get_socket
server = self._get_topology().select_server(selector)
File "/usr/local/lib/python3.4/site-packages/pymongo/topology.py", line 121, in select_server
address))
File "/usr/local/lib/python3.4/site-packages/pymongo/topology.py", line 97, in select_servers
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
解決方法は?
で追跡調査しています。 PYTHON-961 . を渡すことで、この問題を回避できるかもしれません。 connect=False のインスタンスを作成するときに、MongoClient のインスタンスを作成します。これにより、バックグラウンドでの接続を最初のデータベース操作が行われるまで延期し、 MongoClient のモニタースレッドの回転とマルチプロセスのフォークの間に起こるレースコンディションを回避できます。
関連
-
Python カメの描画コマンドとその例
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Python LeNetネットワークの説明とpytorchでの実装
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
Python jiabaライブラリの使用方法について説明
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac