在pickle module documentation有的示例代碼片段:蟒持續時間
reader = pickle.load(open('save.p', 'rb'))
,其在第一讀取看起來像是將分配系統文件描述符,讀取其內容,然後「泄漏」開放描述符,因爲沒有可訪問的任何句柄可以調用close()
。這讓我想知道是否有任何隱藏的魔法來處理這種情況。
潛入源代碼中,我在Modules/_fileio.c中發現文件描述符被導致真正問題的fileio_dealloc()析構函數關閉。
以上示例代碼使用的文件對象的持續時間是多少?在該語句執行之後,該對象是否確實變爲未被引用,因此fd在將來的垃圾收集掃描時是否會受到實際的close(2)
調用?如果是這樣,是示例行的良好做法,還是應該不指望正在發佈的fd,從而冒着內核每進程描述符表耗盡的風險?
非常感謝;你是對的,我的意思是「使用」而不是「返回」並編輯修復。 – msw 2010-03-23 04:20:02