I am using PyMongo. Do I have to close a MongoClient after use?

Thank you for your question.

@Kobe_W is correct, best practice is to call close() when the client is no longer needed or use the client in a with-statement:

with MongoClient(url) as client:
    # use client here

It’s also a good idea to call close() on the cursor too, the best way would be to use a with-statement like this:

with collection.find() as cursor:
    for s in cursor:
        print(s)

When PyMongo’s MongoClient and cursor objects are garbage collected without being closed pymongo will clean up application-side resources automatically (connections, threads, etc…) however some server-side resources could be left open (cursors, sessions). Calling close() explicitly (or using a with-statement) will clean up these server-side resources that would otherwise be left around until they timeout.

I just opened this ticket to improve our documentation around these ideas: https://jira.mongodb.org/browse/PYTHON-3606

4 Likes