Python中多线程访问相同的数据

2024-04-27 00:40:00 发布

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

我在decorator中包装一个函数,以便每次调用它时都在一个新线程中启动。像这样:

def threaded(func):
    def start_thread(*args, **kw):
        """Spawn a new thread on the target function"""
        threading.Thread(target=func, args=args, kwargs=kw).start()
    return start_thread

现在我有一个类,它的init方法每次都要在一个单独的线程中运行,并使用它自己的数据。我的想法是给它所有需要的数据,当init方法结束时,我的工作就完成了。所以我的课是这样的:

^{pr2}$

我从另一个类调用这个类的构造函数,每次都传递新的参数,如下所示:

CreateFigures(newOpts, newList)

在这里,newOpts和newList可以在每次调用CreateFigures()构造函数时更改。我的问题是,每当我想启动一个新线程时,如何将数据安全地传递给这个构造函数。因为我目前的做法是,当多个线程同时访问同一数据时,情况变得一团糟。我尝试用如下Rlock对象将CreateFigures()构造函数的所有语句封闭在with块中:

def __init__(self, options, sList):
    lock = threading.RLock()
    with lock:
        self.opt = options
        self.li = sList
        self.generateFigs()
        self.saveFigsToDisk()

Tags: 数据方法selftargetinitdefargs线程