我有一点线程/锁定困境。我正在努力实现这样的目标:
import threading
import time
class A:
def __init__(self):
self.lock = threading.Lock()
def print_stuff(self):
with self.lock:
## do some hazard with stuff !
print("OK")
def other_function(self):
with self.lock:
## some more hazard stuff
pass
def worker(a):
while alive:
"""thread worker function"""
a.print_stuff()
a = A()
alive = True
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(a,))
threads.append(t)
t.start()
try:
while True:
pass
except KeyboardInterrupt:
alive = False
print('interrupted!')
主要有A类 - 函数集合,但也有一些属性。它将用于通过HTTP或不同协议与其他设备进行通信。
我的想法是锁定每个函数以防止同时调用A实例的两个函数。令我惊讶的是,它也没有锁定,但到目前为止,我没有做任何有害的功能。
我的问题:
实施的锁是否足以防止多个线程触及相同的资源(工作人员只会调用函数,他们不会触及A实例的属性)?
最好是将锁全局化并直接在worker中锁定函数(而不是在A实例中)?见例:
lock = threading.Lock()
def worker(a):
while alive:
"""thread worker function"""
with lock:
a.print_stuff()