gpt4 book ai didi

Python 线程循环方法不会继续代码

转载 作者:行者123 更新时间:2023-12-05 04:12:28 25 4
gpt4 key购买 nike

我有同一个类的两个实例,具有全局声明的 Lock 变量。

这个类有一个 .run() 方法,它创建一个线程,该线程将运行同一类中的另一个方法(这两个方法在问题的最后)

我的代码中有如下一些测试打印语句如下:

[主.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()”竞争资源:

[主.py]

print('test before second')

类方法运行:

[类名.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方法的第二行,目标值应该是不带括号的方法名。

def run(self):
tr = threading.Thread(target= self.update)
# Instead of:
tr = threading.Thread(target= self.update())
tr.start()

不同之处在于,在原始方法中,tr 变量将等待方法的结果,并且永远不会完成。在正确的情况下,tr 将开始运行,程序将继续。

关于Python 线程循环方法不会继续代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40293002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com