Warum gibt PyMongo 3 ServerSelectionTimeoutError?

Ich benutze

Python 3.4.2PyMongo 3.0.2 Mongolab läuft Mongod 2.6.9uWSGI 2.0.10CherryPy 3.7.0nginx 1.6.2

uWSGI Startparameter:

--socket 127.0.0.1:8081 --daemonize --enable-threads --threads 2 --processes 2

Ich richte meinen MongoClient EINMAL ein:

self.mongo_client = MongoClient('mongodb://user:[email protected]:port/mydb')
self.db = self.mongo_client['mydb']

Ich versuche, ein JSON-Diktat in MongoDB zu speichern:

result = self.db.jobs.insert_one(job_dict)

Es funktioniert über einen Komponententest, der denselben Codepfad wie Mongodb ausführt. Wenn ich jedoch über CherryPy und uWSGI einen HTTP-POST ausführe, erhalte ich Folgendes:

pymongo.errors.ServerSelectionTimeoutError: No servers found yet

Warum wird dieses Verhalten bei der Ausführung über CherryPy und uWSGI angezeigt? Ist das vielleicht das neue Thread-Modell in PyMongo 3?

Aktualisieren

Wenn ich mit dem in CherryPy integrierten Server ohne uWSGI und nginx ausführe, wird dasinsert_one() funktioniert.

Update 1/25 16:53 EST:

Nach dem Hinzufügen eines Debugs in PyMongo scheint es, dasstopology._update_servers() weiß, dass server_type = 2 für server 'myserver-a.mongolab.com' ist. Jedochserver_description.known_servers() hat den Servertyp = 0 für den Server 'myserver.mongolab.com'

Dies führt zu folgendem Stack-Trace:

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

Antworten auf die Frage(24)

Ihre Antwort auf die Frage