2011-10-14 2 views
1

다음 코드는 w/o 문제없이 실행됩니다. 어떻게이 문제를 해결하는pymongo에서 안전 전원을 켤 수 없습니다.

collection.insert(file_cont, safe=True) 


Traceback (most recent call last): 
    File "/home/user/Documents/Python/Python_MongoDB/connect_db.py", line 102, in <module> 
    patterns="*.[zZ][iI][pP]") 
    File "/home/user/Documents/Python/Python_MongoDB/connect_db.py", line 93, in fs_load_data_to_db 
    collection.insert(file_cont, safe=True) 
    File "/usr/local/lib/python2.7/dist-packages/pymongo-2.0.1-py2.7-linux-i686.egg/pymongo/collection.py", line 283, in insert 
    check_keys, safe, kwargs), safe) 
    File "/usr/local/lib/python2.7/dist-packages/pymongo-2.0.1-py2.7-linux-i686.egg/pymongo/message.py", line 75, in insert 
    data += "".join(encoded) 
MemoryError 

질문 1> 다음과 같이

collection.insert(file_cont) 

다음 코드는 문제가 w를 실행?

질문 2> insert (sth, safe = True) 또는 insert (sth)를 사용해야합니까?

+0

무엇을 삽입하려고합니까? MemoryError는 인터프리터의 메모리가 부족함을 의미합니다. –

답변

2

너무 큰 파일을 데이터베이스에 삽입하려는 것 같습니다.

는 pymongo 문서에 따르면, safe parameter 의미 : 안전이 True

경우 삽입이 하나가 발생하면 OperationFailure을 제기, 오류를 점검합니다. 안전한 삽입은 데이터베이스에서 응답 을 기다리는 반면, 정상 삽입은 응답하지 않습니다.

따라서, 이론적으로 당신은 OperationFailure 제기 될 것으로 예상하지만, 당신이 얻을 것은 의미 MemoryError, a standard python error입니다해야 작업이 메모리가 부족하지만, 상황이 을 수있는 경우

제기 (개체를 삭제하여) 구출 할 수 있습니다. 연관된 값은 문자열로 어떤 종류의 (내부) 연산에서 메모리가 부족했는지 나타냅니다. 기본 메모리 관리 아키텍처 (C의 malloc() 함수) 때문에 인터프리터는 항상 이 상황에서 완전히 복구되지 않을 수 있습니다. 그럼에도 불구하고 프로그램이 원인 인 경우 스택 추적을 인쇄 할 수 있도록 예외가 발생합니다.

collection.insert(file_cont)이라고 말하면 코드가 작동하지만 데이터베이스의 삽입이 자동으로 실패합니다. 데이터베이스에 삽입하려고하는 크기와 컴퓨터에있는 사용 가능한 메모리 크기를 확인해야합니다.

0

안전과 무슨 상관이 있습니까? 메모리가 부족합니다 (파이썬 프로그래밍과 관련 있음). 완전히 관련 없음

+0

OP에서 python 태그를 제거했습니다. – q0987

관련 문제