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