簡體   English   中英

pymongo“OperationFailure”有什么問題

[英]What's wrong with pymongo "OperationFailure"

源代碼如下:

# total_record with more than 4 millon datas, which comes from file
n = 200
idlist = [ total_record[i:i + n] for i in range(0, len(total_record ), n)]
for sub_list in idlist:
    ret = self.table.find({'_id': {'$in': sub_list}})
    for r in ret:
        # some logic to process r

代碼可以正確處理部分數據,然后遇到如下問題。 另外,這只是讀操作,不是寫操作

    for r in ret:
  File "/data/yard/base/miniconda3/lib/python3.6/site-packages/pymongo/cursor.py", line 1189, in next
    if len(self.__data) or self._refresh():
  File "/data/yard/base/miniconda3/lib/python3.6/site-packages/pymongo/cursor.py", line 1126, in _refresh
    self.__send_message(g)
  File "/data/yard/base/miniconda3/lib/python3.6/site-packages/pymongo/cursor.py", line 982, in __send_message
    helpers._check_command_response(first)
  File "/data/yard/base/miniconda3/lib/python3.6/site-packages/pymongo/helpers.py", line 155, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: operation was interrupted

我的python版本是3.6.4,pymongo版本是3.7.1

您可以嘗試使用no_cursor_timeout初始化 MongoDB Cursor 並使用batch_size()限制批量大小

for sub_list in idlist:
    ret = self.table.find({'_id': {'$in': sub_list}}, no_cursor_timeout=True).batch_size(40)
    try:
        for r in ret:
            # some logic to process r
    finally:
        ret.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM