Python使多线程中的每个锁都成为可能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python使多线程中的每个锁都成为可能相关的知识,希望对你有一定的参考价值。

我正在考虑如何为每个线程制作几个锁。

我现在有3个主题。

A:主线程(数据发送)B:数据接收线程C:每2秒线程发送一次数据

除了发送时间,我不想停止B(接收线程)。如何在A,B之间以及A,C之间轻松使用锁定!! ...

class A:
    def __init__():
        self._A_B_lock = RLock()
        self._A_C_lock = RLock()
        self._B = threading.Thread(target=B_receiving_thread, args=(self._A_B_lock,) ... ).start()
        self._C = threading.Thread(target=C_sending_2sec_thread, args=(self._A_C_lock,) ... ).start()

    def sending():
        with A_B_lock:
            sending_data()

    def B_receiving_thread(self,A_B_lock):
        while(1):
            with A_B_lock:
                receiving_data()
            #do something

    def C_sending_2sec_thread(self,A_C_lock):
        while(1):
            with A_C_lock:
                self.sending()

    # actually I want to make decorator with A_C_lock, I have so many functions.
    def so_many_functions():
        with self.A_C_lock:
            #do important thing

这段代码不起作用..

答案

装饰师是个好主意。你可以用它

def decorator(*locks):
    def _decorator(func):
        def inner_function(*args, **kwargs):
            for lock in locks:
                lock.acquire()
            value = func(*args, **kwargs)
            for lock in locks:
                lock.release()
            return value
        return inner_function
    return _decorator

然后你装饰每个函数,并作为参数传递该函数在不干扰他人的情况下完成工作所需的所有锁。像这样,

lock1 = threading.Lock()
lock2 = threading.Lock()

@decorator(lock1, lock2)
def f1(word):
    for char in word:
        print(char)
    '''DO STUFF'''


@decorator(lock1, lock2)
def f2(word):
    for char in word:
        print(char)
    '''
    DO STUFF
    '''


t1 = threading.Thread(target=f1, args=('Hello ',))
t2 = threading.Thread(target=f2, args=('world',))
t1.start()
t2.start()

这只是一个虚拟示例,但您可以轻松地将其应用于您的代码。关于它的好处是,您可以轻松选择要用于每个不同功能的锁。

希望能帮助到你

以上是关于Python使多线程中的每个锁都成为可能的主要内容,如果未能解决你的问题,请参考以下文章

NOKOV动作捕捉系统使多场协同无人机自主建造成为可能

java多线程中的死锁活锁饥饿无锁都是什么鬼?

python中的多线程和多进程编程

如何使多连接数据加载原子化?

Synchronized简介与原理

synchronized原理及1.6之后的锁升级优化