¿Por qué PyMongo 3 está dando ServerSelectionTimeoutError?
Estoy usando:
Python 3.4.2PyMongo 3.0.2mongolab corriendo mongod 2.6.9uWSGI 2.0.10CherryPy 3.7.0nginx 1.6.2Parámetros de inicio de uWSGI:
--socket 127.0.0.1:8081 --daemonize --enable-threads --threads 2 --processes 2
Configuré mi MongoClient UNA vez:
self.mongo_client = MongoClient('mongodb://user:[email protected]:port/mydb')
self.db = self.mongo_client['mydb']
Intento guardar un dict JSON en MongoDB:
result = self.db.jobs.insert_one(job_dict)
Funciona a través de una prueba unitaria que ejecuta la misma ruta de código a mongodb. Sin embargo, cuando ejecuto a través de CherryPy y uWSGI usando un HTTP POST, obtengo esto:
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
¿Por qué veo este comportamiento cuando se ejecuta a través de CherryPy y uWSGI? ¿Es este quizás el nuevo modelo de hilo en PyMongo 3?
Actualizar:
Si ejecuto sin uWSGI y nginx utilizando el servidor incorporado CherryPy, elinsert_one()
trabajos.
Actualización 1/25 4:53 pm EST:
Después de agregar algo de depuración en PyMongo, parece quetopology._update_servers()
sabe que server_type = 2 para el servidor 'myserver-a.mongolab.com'. sin embargoserver_description.known_servers()
tiene server_type = 0 para el servidor 'myserver.mongolab.com'
Esto lleva al siguiente seguimiento de pila:
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