PyMongo supports Gevent. Simply call Gevent’s monkey.patch_all() before loading any other modules:
>>> # You must call patch_all() *before* importing any other modules >>> from gevent import monkey; monkey.patch_all() >>> from pymongo import MongoClient >>> client = MongoClient()
PyMongo’s Gevent support means that start_request() ensures the current greenlet (not merely the current thread) uses the same socket for all operations until end_request() is called. See the requests documentation for details on requests in PyMongo.
If you need to use standard Python threads in the same process as Gevent and greenlets, run monkey.patch_socket(), rather than monkey.patch_all(), and create a MongoClient with use_greenlets=True. The MongoClient will use a special greenlet-aware connection pool.
>>> from gevent import monkey; monkey.patch_socket() >>> from pymongo import MongoClient >>> client = MongoClient(use_greenlets=True)
An instance of MongoReplicaSetClient created with use_greenlets=True will also use a greenlet-aware pool. Additionally, it will use a background greenlet instead of a background thread to monitor the state of the replica set.
>>> from gevent import monkey; monkey.patch_socket() >>> from pymongo.mongo_replica_set_client import MongoReplicaSetClient >>> rsc = MongoReplicaSetClient( ... 'mongodb://localhost:27017,localhost:27018,localhost:27019', ... replicaSet='repl0', use_greenlets=True)
Setting use_greenlets is unnecessary under normal circumstances; simply call patch_all to use Gevent with PyMongo.