我有一個服務器上運行的幾個腳本,醃製和unpickle各種字典。他們都使用相同的基本代碼進行酸洗,如下所示:Python酸洗字典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()
所有的腳本運行正常,除了其中一個。有問題的人去各種網站,並將數據擦除並存儲在字典中。此代碼運行整天酸洗和取詞字典,並在午夜停止。 cronjob然後在第二天早上再次啓動它 。這個腳本可以運行幾個星期而沒有問題,但是每當腳本嘗試打開字典時,由於EOFError而導致腳本死亡一次。字典的大小通常約爲80 MB。我甚至嘗試在SellerDict.close()之前添加SellerDict.flush(),以確保晚上正在刷新數據。
任何想法是什麼可能導致此? Python非常穩定,所以我不認爲這是由於文件的大小。代碼在死前很長一段時間運行的情況下,它導致我相信可能某些內容正在導致此問題的字典中被保存,但我不知道。另外,如果你知道更好的方法來保存除醃菜以外的字典,我可以選擇。就像我之前說過的,字典不斷地被打開和關閉。僅僅爲了澄清,只有一個程序會使用相同的字典,所以問題不是由試圖訪問相同字典的多個程序引起的。
更新:
這是我從一個日誌文件追溯。
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
您是否在使用任何形式的鎖定策略? – 2012-04-21 22:31:30
我沒有使用任何鎖定策略... – jordanskis 2012-04-21 22:34:49