Python単純プロセスロックコードインスタンス

1411 ワード

スレッドについてお話しします
マルチスレッドでは、共有リソースの正確性を保証するために、スレッド同期技術を用いることが多い.いくつかの敏感な操作を原子操作に変更し、同じ時点で複数のスレッドのうち1つのスレッドだけがこの原子操作を実行することを保証します.私が最もよく使うのは反発ロックで、独占ロックとも呼ばれています.次に読み書きロック、信号量、条件変数などがあります.それ以外に、プロセス間通信で信号を使用し、あるプロセスに信号処理関数を設定し、プロセスが信号を受信したときにいくつかの操作を実行します.実際にはスレッドでも信号を受け入れることができ,このメカニズムを用いてスレッド同期を実現することもできる.詳細は//www.jb 51.net/article/64977.htm
プロセスについて
プロセスでは、いくつかのプロセス間通信方式を通じて、プロセス間の同期を実現することができます.最近私が出会った1つの状況は、ある採集システムのプロセスプールの多くのプロセスが同じログファイルにログを印刷し、プロセス間通信で実現すると、面倒です.もう一つの方法は、メモリを共有する方法を採用すれば、異なるプロセスはそれぞれログメッセージを共有メモリを通じて1つのスレッドの安全なキューに入れ、もう1つのプロセスを確立して専門的にログを印刷することを担当し、このように大乱されないことを保証することができ、ログの正確性を保証することができるが、コード量も多い.共有メモリに反発ロックを設定し、すべてのプロセスを共有する方法もあります.スレッドのように、簡単な反発ロックがあれば、ロックをかけるだけでプロセス間の反発が実現すればいいのです.以前はファイルにロックをかけていた印象もあったので、プロセス間の反発ロックを実現しました.

#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) 

ロックをかけるロックを解放するunlock()はとても簡単に使えますので、興味のある方は試してみてください.