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使多线程中的每个锁都成为可能的主要内容,如果未能解决你的问题,请参考以下文章