여러 사전을 pickle 및 unpickle하는 서버에서 여러 스크립트가 실행 중입니다.Python pickling dictionary EOFError
SellerDict=open('/home/hostadl/SellerDictkm','rb')
SellerDictionarykm=pickle.load(SellerDict)
SellerDict.close()
SellerDict=open('/home/hostadl/SellerDictkm','wb')
pickle.dump(SellerDictionarykm,SellerDict)
SellerDict.close()
모든 스크립트는 그 중 하나를 제외하고 잘 실행 : 아래 그림과 같이 그들은 모두 산세에 대해 동일한 기본 코드를 사용합니다. 문제가있는 웹 사이트는 여러 웹 사이트로 이동하여 데이터를 스크랩하고 사전에 저장합니다. 이 코드는 하루 종일 절임 및 unpickling 사전을 실행하고 자정에 중지합니다. cronjob 다음 아침에 다시 시작 다음날 아침. 이 스크립트는 문제없이 몇 주 동안 실행할 수 있지만 사전을 열려고하면 EOFError로 인해 스크립트가 한 달에 한 번 죽습니다. 사전의 크기는 대개 약 80MB입니다. SellerDict.close() 전에 SellerDict.flush()를 추가하여 데이터를 pickling 할 때 저녁이 플러시되는 것을 확인하기까지했습니다.
어떤 생각이 원인 일 수 있습니까? 파이썬은 매우 견고하여 파일의 크기 때문이라고 생각하지 않습니다. 코드가 죽기 전에 오랜 시간 동안 잘 돌아가는 곳에서는이 문제를 일으키는 사전에 뭔가가 저장되어 있을지도 모릅니다. 그러나 나는 전혀 모른다.
또한 피클 이외의 사전을 저장하는 더 좋은 방법을 알고 있다면 옵션을 사용할 수 있습니다. 앞서 말했듯이, 사전은 끊임없이 열리고 닫힙니다. 설명을 위해 하나의 프로그램 만 동일한 사전을 사용하므로 동일한 사전에 액세스하려는 여러 프로그램에서 문제가 발생하지 않습니다.
는 UPDATE : 여기
내가 로그 파일에서이 역 추적입니다. 여기import pickle
# define initial dict
orig_dict={'foo':'one'}
# write dict to file
writedict_file=open('./mydict','wb')
pickle.dump(orig_dict,writedict_file)
writedict_file.close()
# read the dict from file
readdict_file=open('./mydict','rb')
mydict=pickle.load(readdict_file)
readdict_file.close()
# now we have new data to save
new_dict={'foo':'one','bar':'two'}
writedict_file=open('./mydict','wb')
#pickle.dump(orig_dict,writedict_file)
#writedict_file.close()
# but...whoops! before we could save the data
# some other reader tried opening the file
# now they are having a problem
readdict_file=open('./mydict','rb')
mydict=pickle.load(readdict_file) # errors out here
readdict_file.close()
출력입니다 :
Traceback (most recent call last):
File "/home/hostadl/CompileRecentPosts.py", line 782, in <module>
main()
File "/home/hostadl/CompileRecentPosts.py", line 585, in main
SellerDictionarykm=pickle.load(SellerDict)
EOFError
어떤 종류의 잠금 전략을 사용하고 있습니까? –
잠금 전략을 사용하고 있지 않습니다 ... – jordanskis