Python - 由多个线程

时间:2018-06-05 07:42:45

标签: python multithreading thread-safety locking

我有一点线程/锁定困境。我正在努力实现这样的目标:

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()

0 个答案:

没有答案