python中的全局和实例互斥有什么区别

时间:2014-08-04 10:14:13

标签: python mutex

将互斥体用作全局变量或实例变量有什么区别? 例如,这两个用法?:

my_lock = RLock()
class myclass:

    def __init__(self):
        self.mutex = my_lock
    def func():
        with self.mutex:
            #do something

class myclass:

    def __init__(self):
        self.mutex = RLock()
    def func():
        with self.mutex:
            #do something

1 个答案:

答案 0 :(得分:1)

您的第一个版本;

my_lock = RLock()
class myclass:

    def __init__(self):
        self.mutex = my_lock

...为类的所有实例创建一个共同的互斥锁,而

class myclass:

    def __init__(self):
        self.mutex = RLock()

...为每个实例创建一个互斥锁。

在第一种情况下,互斥锁阻止func任何 myclass对象中同时执行。

在第二种情况下,互斥锁阻止func单个 myclass对象中同时执行。