【发布时间】:2022-01-21 02:31:55
【问题描述】:
我想问一个关于以下代码的问题:假设我们要构建一个threading.Thread 子类ThreadCounter,这样它就有一个名称、一个初始值和一个终端值作为参数,并且一旦启动它就会递增初始值直到等于终结值。
import threading
from threading import Thread
import time
lock = threading.Lock()
class ThreadCounter(Thread):
def __init__(self, nome, first, limit, lock):
# Call the Thread class's init function
Thread.__init__(self)
self.nome = nome
self.first = first
self.limit = limit
self.lock = lock
# Override the run() function of Thread class
def run(self):
while self.first < self.limit:
self.lock.acquire()
self.first += 1
print(self.nome,self.first)
time.sleep(3)
self.lock.release()
t1 = ThreadCounter('Thread-1', 1, 5, lock)
t2 = ThreadCounter('Thread-2', 2, 10, lock)
t1.start()
t2.start()
t1.join()
t2.join()
我不明白当我们在两个类中使用锁时会发生什么。特别是,我们是否将相同的锁对象分配给具有分配的两个实例
t1 = ThreadCounter('Thread-1', 1, 5, lock)
t2 = ThreadCounter('Thread-2', 2, 10, lock)
或者我们对于 ThreadCounter 类的每次出现都有一个不同的锁对象,这样 t1 和 t2 就不会共享同一个锁?
【问题讨论】:
-
id()函数为您提供任何 Python 对象的唯一标识符。这个ID只有在一个对象被销毁后才会被重用,但同时对于两个对象来说,它永远不会相同。我之所以提到这一点,是因为它可以让您自己在这里回答您的问题,并在将来回答任何类似的问题。
标签: python multithreading