在Python中如何锁定一个方法?

26

我的问题是:我正在使用APScheduler库在我的应用程序中添加定时作业。我有多个作业同时执行相同的代码,但具有不同的参数。当这些作业同时访问相同的方法时,会导致我的程序工作不正确。

我想知道是否有一种方法可以锁定Python 3.4中的方法,以便一次只能有一个线程访问它?如果有,请提供一个简单的示例代码。谢谢。

1个回答

40

你可以使用基本的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 Lock ObjectsPython中的线程同步机制


1
锁支持上下文管理协议,通常情况下应该优先使用该协议而不是显式的方法调用。 - Dimitris Fasarakis Hilliard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接