Python簡單進(jìn)程鎖代碼實(shí)例
先說說線程
在多線程中,為了保證共享資源的正確性,我們常常會(huì)用到線程同步技術(shù).
將一些敏感操作變成原子操作,保證同一時(shí)刻多個(gè)線程中只有一個(gè)線程在執(zhí)行這個(gè)原子操作。
我最常用的是互斥鎖,也稱獨(dú)占鎖。其次還有讀寫鎖,信號(hào)量,條件變量等。
除此之外,我們?cè)谶M(jìn)程間通信時(shí)會(huì)用到信號(hào),向某一個(gè)進(jìn)程發(fā)送信號(hào),該進(jìn)程中設(shè)置信號(hào)處理函數(shù),然后當(dāng)該進(jìn)程收到信號(hào)時(shí),執(zhí)行某些操作。
其實(shí)在線程中,也可以接受信號(hào),利用這種機(jī)制,我們也可以用來實(shí)現(xiàn)線程同步。更多信息見 http://m.fzitv.net/article/64977.htm
再說說進(jìn)程
進(jìn)程里我們通過一些進(jìn)程間通信方式,可以實(shí)現(xiàn)進(jìn)程間的同步。
最近我遇到的一個(gè)情況是,某采集系統(tǒng)進(jìn)程池中很多進(jìn)程會(huì)向同一個(gè)日志文件中打印日志,如果通過進(jìn)程間通信實(shí)現(xiàn),比較麻煩。
還有一種辦法,如果采用共享內(nèi)存的方式,不同的進(jìn)程分別將日志消息通過共享內(nèi)存放入一個(gè)線程安全的隊(duì)列中,再建立一個(gè)進(jìn)程負(fù)責(zé)專門打印日志,這樣也可以保證不被大亂,
保證日志的正確性,但代碼量也很多阿。
還有一種辦法,在共享內(nèi)存中設(shè)置一個(gè)互斥鎖,所有進(jìn)程共享。
如果能像線程一樣,有一個(gè)簡單的互斥鎖,用的時(shí)候只要加鎖,就能實(shí)現(xiàn)進(jìn)程間的互斥就好了。之前對(duì)文件加鎖,也有些印象,于是我用它實(shí)現(xiàn)了一個(gè)進(jìn)程間的互斥鎖
#coding=utf-8
"""
Process mutex lock.
Actually it is implemented by file lock.
"""
import fcntl
class 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()
非常簡單使用,有興趣的朋友可以試一試。
相關(guān)文章
Pycharm插件(Grep Console)自定義規(guī)則輸出顏色日志的方法
這篇文章主要介紹了Pycharm插件(Grep Console)自定義規(guī)則輸出顏色日志的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Python編程之字符串模板(Template)用法實(shí)例分析
這篇文章主要介紹了Python編程之字符串模板(Template)用法,結(jié)合具體實(shí)例形式分析了Python字符串模板的功能、定義與使用方法,需要的朋友可以參考下2017-07-07
Django實(shí)現(xiàn)WebSocket在線聊天室功能(channels庫)
本文基于channels庫Django實(shí)現(xiàn)WebSocket在線聊天室功能,包括安裝及創(chuàng)建django項(xiàng)目的全過程,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
python實(shí)現(xiàn)兩個(gè)經(jīng)緯度點(diǎn)之間的距離和方位角的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)經(jīng)緯度點(diǎn)之間的距離和方位角的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
用Python selenium實(shí)現(xiàn)淘寶搶單機(jī)器人
今天給大家?guī)淼氖顷P(guān)于Python實(shí)戰(zhàn)的相關(guān)知識(shí),文章圍繞著用Python selenium實(shí)現(xiàn)淘寶搶單機(jī)器人展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
python刪除指定類型(或非指定)的文件實(shí)例詳解
這篇文章主要介紹了python刪除指定類型(或非指定)的文件,以實(shí)例形式較為詳細(xì)的分析了Python刪除文件的相關(guān)技巧,需要的朋友可以參考下2015-07-07

