web-dev-qa-db-ja.com

Pythonでメソッドをロックしますか?

これが私の問題です。APSchedulerライブラリを使用して、スケジュールされたジョブをアプリケーションに追加しています。同じコードを同時に実行する複数のジョブがありますが、パラメーターは異なります。これらのジョブが同時に同じメソッドにアクセスすると、プログラムが正しく機能しない場合に問題が発生します。

Python 3.4でメソッドをロックして、一度に1つのスレッドだけがアクセスできるようにする方法があるかどうか知りたいですか?そうであれば、簡単なサンプルコードを投稿してください。ありがとうございます。

10
DanijelT

基本的なpythonロックメカニズムを使用できます:

from threading import Lock
lock = Lock()
...

def foo():
    lock.acquire()
    try:
        # only one thread can execute code there
    finally:
        lock.release() #release lock

またはコンテキスト管理あり:

def foo():
    with lock:
        # only one thread can execute code there

詳細については、 Python 3ロックオブジェクト および Pythonのスレッド同期メカニズム を参照してください。

13