2011-11-21 37 views
5

[我爲無名標題道歉;我無法想出更好的東西。歡迎提出更好的標題建議。]如何賦予類聲明式的功能?

我想實現一個接口到HDF5文件,通過文件鎖定支持多進程級別的併發。此模塊的預期環境是通過NFS訪問共享磁盤的Linux集羣。目標是通過在多個不同主機上運行的多個並行進程來啓用對同一文件的併發訪問(通過NFS)。

我希望能夠通過對h5py.File類的包裝類來實現鎖定功能。 (h5py已經提供支持線程 -level併發,但底層HDF5庫不是線程安全的。)

這將是巨大的,如果我能在精神,這做點什麼

class LockedH5File(object): 
    def __init__(self, path, ...): 
     ... 
     with h5py.File(path, 'r+') as h5handle: 
      fcntl.flock(fcntl.LOCK_EX) 
      yield h5handle 
     # (method returns) 

我認識到,上面的代碼是錯誤的,但我希望它傳達的主要思想:即有表達LockedH5File('/path/to/file')提供一個打開的句柄到客戶端的代碼,這樣就可以對它進行各種任意讀/寫操作。當這個句柄超出範圍時,它的析構函數關閉句柄,從而釋放鎖。

,激勵該佈置的目的是雙重的:

  1. 解耦創建句柄的(由庫代碼)從被在手柄隨後請求的操作(由客戶端碼),並

  2. 確保關閉句柄並釋放鎖,不管 執行中間代碼的過程中會發生什麼情況(如異常,未處理 信號,Python的內部錯誤)。

如何在Python中實現這種效果?

謝謝!

回答