我有两个相同类的实例,并且全局声明了一个Lock变量。
此类具有.run()方法,该方法创建一个线程,该线程将运行同一类中的另一个方法(这两个方法位于问题的末尾)
我的代码中有一些测试打印语句,如下所示:
[main.py]
first = className()
second = className()
print('test before first')
first.run()
print('test before second')
second.run()
我的输出是:
[输出]
test before first
first Thread lock acquired by first
first Thread lock released (will sleep now)
first Thread lock acquired by first
first Thread lock released (will sleep now)
并且永远都不会到达这一行,它应该在这里启动另一个线程,该线程将使用互斥锁“ threading.Lock()”来争夺资源:
[main.py]
print('test before second')
运行的类方法:
[className.py]
def run(self):
tr = threading.Thread(target= self.update())
tr.start()
return True
def update(self):
while(True):
try:
global lock
lock.acquire()
print('first Thread lock acquired by ' + self.name)
#do stuff
lock.release()
print('lock release')
sleep(2)
except:
sleep(5)
在run Method的第二行中,目标值应为不带括号的方法名称。
def run(self):
tr = threading.Thread(target= self.update)
# Instead of:
tr = threading.Thread(target= self.update())
tr.start()
区别在于,在原始变量中,tr变量将等待方法的结果,并且永远不会完成。如果是正确的,tr将开始运行,程序将继续。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句