def start_request(self): """Ensure the current thread or greenlet always uses the same socket until it calls :meth:`end_request`. This ensures consistent reads, even if you read after an unacknowledged write. In Python 2.6 and above, or in Python 2.5 with "from __future__ import with_statement", :meth:`start_request` can be used as a context manager: >>> connection = pymongo.MongoClient(auto_start_request=False) >>> db = connection.test >>> _id = db.test_collection.insert({}) >>> with connection.start_request(): ... for i in range(100): ... db.test_collection.update({'_id': _id}, {'$set': {'i':i}}) ... ... # Definitely read the document after the final update completes ... print db.test_collection.find({'_id': _id}) If a thread or greenlet calls start_request multiple times, an equal number of calls to :meth:`end_request` is required to end the request. .. versionchanged:: 2.4 Now counts the number of calls to start_request and doesn't end request until an equal number of calls to end_request. .. versionadded:: 2.2 The :class:`~pymongo.pool.Request` return value. :meth:`start_request` previously returned None """ self.__pool.start_request() return pool.Request(self)
def start_request(self): """Ensure the current thread or greenlet always uses the same socket until it calls :meth:`end_request`. For :class:`~pymongo.ReadPreference` PRIMARY, auto_start_request=True ensures consistent reads, even if you read after an unsafe write. For read preferences other than PRIMARY, there are no consistency guarantees. In Python 2.6 and above, or in Python 2.5 with "from __future__ import with_statement", :meth:`start_request` can be used as a context manager: >>> connection = pymongo.ReplicaSetConnection(auto_start_request=False) >>> db = connection.test >>> _id = db.test_collection.insert({}, safe=True) >>> with connection.start_request(): ... for i in range(100): ... db.test_collection.update({'_id': _id}, {'$set': {'i':i}}) ... ... # Definitely read the document after the final update completes ... print db.test_collection.find({'_id': _id}) .. versionadded:: 2.2 The :class:`~pymongo.pool.Request` return value. :meth:`start_request` previously returned None """ for mongo in self.__pools.values(): if 'pool' in mongo: mongo['pool'].start_request() self.__in_request = True return pool.Request(self)