Skip to content
Advertisement

Why is PyMongo 3 giving ServerSelectionTimeoutError?

I’m using:

  • Python 3.4.2
  • PyMongo 3.0.2
  • mongolab running mongod 2.6.9
  • uWSGI 2.0.10
  • CherryPy 3.7.0
  • nginx 1.6.2

uWSGI start params:

JavaScript

I setup my MongoClient ONE time:

JavaScript

I try and save a JSON dict to MongoDB:

JavaScript

It works via a unit test that executes the same code path to mongodb. However when I execute via CherryPy and uWSGI using an HTTP POST, I get this:

JavaScript

Why am I seeing this behavior when run via CherryPy and uWSGI? Is this perhaps the new thread model in PyMongo 3?

Update:

If I run without uWSGI and nginx by using the CherryPy built-in server, the insert_one() works.

Update 1/25 4:53pm EST:

After adding some debug in PyMongo, it appears that topology._update_servers() knows that the server_type = 2 for server ‘myserver-a.mongolab.com’. However server_description.known_servers() has the server_type = 0 for server ‘myserver.mongolab.com’

This leads to the following stack trace:

JavaScript

Advertisement

Answer

We’re investigating this problem, tracked in PYTHON-961. You may be able to work around the issue by passing connect=False when creating instances of MongoClient. That defers background connection until the first database operation is attempted, avoiding what I suspect is a race condition between spin up of MongoClient’s monitor thread and multiprocess forking.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement