Re: Pymongo no_cursor_timeout ignored

From: Bernie Hackett <bernie@xxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Fri, 15 Apr 2016 08:46:07 -0700 (PDT)
Why ads?
Since you're using Connection(), you're using PyMongo 2.x. In that case, 
you want timeout=False, instead of no_cursor_timeout. I would highly 
recommend upgrading to PyMongo 3.x.

On Friday, April 15, 2016 at 8:11:28 AM UTC-7, a_l wrote:

There are about 350,000 records in the below test, which iterate just fine 
with a simple find and no wait inbetween, but if you introduce a long wait 
of the order of 15 minutes, the cursor becomes expired after the long wait, 
even with the no_cursor_timeout parameter set to True. 

How can one keep the cursor open?

Minimum case:

import pymongo
import time

d = pymongo.Connection()['c']['c'] 
out = []
for a in d.find(no_cursor_timeout=True):
    out.append(a['data'][0:12])
    if len(out) == 1000:      # Run through at least 500 results first 
        time.sleep(60 * 18)   # Wait 18 minutes
    if len(out) % 500 == 0:   # Continue printing status every 500 
documents
        print len(out)

Output:

:~/calculators/dataenrich$ python test.py
500

1000
Traceback (most recent call last):
  File "test.py", line 29, in <module>
    for a in d3.find(no_cursor_timeout=True):
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 
1076, in next
    if len(self.__data) or self._refresh():
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 
1037, in _refresh
    limit, self.__id))
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 
958, in __send_message
    self.__compile_re)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 
101, in _unpack_response
    cursor_id)
pymongo.errors.CursorNotFound: cursor id '94954022856' not valid at server


-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/7bd101b1-a642-48aa-93f2-98f22046afb8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?