如何在python中使第三方obj线程安全?

2024-10-02 22:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python中使用第三个模块,如下所示:

import some_module

class MyService():
    
    def __init__(self):
        self.some_module_obj = some_module.some_obj()

    def run(self,some_parameter):
        self.some_module_obj.some_attritude(some_parameter)

我知道some_module.some_obj及其方法some_attritude不是线程安全的,我的问题是如何使MyService线程安全

更新1:

我看到了Artiom Kozyrev的代码,下面的代码是否正确

import some_module
import threading
GLOBAL_LOCK = threading.Lock()

class Singleton(type):

    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            with GLOBAL_LOCK:
                if cls not in cls._instances:
                    cls._instances[cls] = super(Singleton, cls).__call__(
                        *args, **kwargs
                    )
        return cls._instances[cls]

class MyService(metaclass=Singleton):
    
    def __init__(self):
        self.some_module_obj = some_module.some_obj()
        self.rlock = threading.RLock()

    def run(self,some_parameter):
        result = None
        with self.rlock:
            result = self.some_module_obj.some_attritude(some_parameter)
        return result     

Tags: instancesimportselfobjparameterinitdefsome