Python 實現進程鎖

來源:互聯網
上載者:User

標籤:進程鎖   進程間加鎖   進程間互斥   

先說說線程

在多線程中,為了保證共用資源的正確性,我們常常會用到線程同步技術.

將一些敏感操作變成原子操作,保證同一時刻多個線程中只有一個線程在執行這個原子操作。

我最常用的是互斥鎖,也稱獨佔鎖。其次還有讀寫鎖,訊號量,條件變數等。

除此之外,我們在處理序間通訊時會用到訊號,向某一個進程發送訊號,該進程中設定訊號處理函數,然後當該進程收到訊號時,執行某些操作。

其實線上程中,也可以接受訊號,利用這種機制,我們也可以用來實現線程同步。更多資訊見 blog.csdn.net/aspnet_lyc/article/details/19904825


再說說進程

進程裡我們通過一些處理序間通訊方式,可以實現進程間的同步。

最近我遇到的一個情況是,某採集系統進程池中很多進程會向同一個記錄檔中列印日誌,如果通過處理序間通訊實現,比較麻煩。

還有一種辦法,如果採用共用記憶體的方式,不同的進程分別將日誌訊息通過共用記憶體放入一個安全執行緒的隊列中,再建立一個進程負責專門列印日誌,這樣也可以保證不被大亂,

保證日誌的正確性,但代碼量也很多阿。

還有一種辦法,在共用記憶體中設定一個互斥鎖,所有進程共用。

如果能像線程一樣,有一個簡單的互斥鎖,用的時候只要加鎖,就能實現進程間的互斥就好了。之前對檔案加鎖,也有些印象,於是我用它實現了一個進程間的互斥鎖


#coding=utf-8"""Process mutex lock.Actually it is implemented by file lock."""import fcntlclass ProcessLock(object):        __lockfd = None        @staticmethod        def lock():                ProcessLock.__lockfd = open(__file__, 'a+')                fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_EX)        @staticmethod        def unlock():                fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_UN)

加鎖  ProcessLock.lock()

釋放 ProcessLock.unlock()

非常簡單使用,有興趣的朋友可以試一試。

Python 實現進程鎖

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.