同期に使用しました。
import functools
def synchronized(lock):
""" Synchronization decorator """
def wrap(f):
@functools.wraps(f)
def newFunction(*args, **kw):
lock.acquire()
try:
return f(*args, **kw)
finally:
lock.release()
return newFunction
return wrap
コメントで指摘したように、Python 2.5以降では、with
ステートメントをthreading.Lock
(またはmultiprocessing.Lock
バージョン2.6以降)オブジェクトと組み合わせて 使用して、デコレータの実装を次のように単純化できます。
import functools
def synchronized(lock):
""" Synchronization decorator """
def wrap(f):
@functools.wraps(f)
def newFunction(*args, **kw):
with lock:
return f(*args, **kw)
return newFunction
return wrap
とにかく、あなたはそれをこのように使います:
import threading
lock = threading.Lock()
@synchronized(lock)
def do_something():
# etc
@synchronzied(lock)
def do_something_else():
# etc
基本的に、関数呼び出しの両側にlock.acquire()
/ lock.release()
を置くだけです。