Python Thread Loop方法不会继续代码

时间:2016-10-27 19:44:05

标签: python multithreading

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

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

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

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

1 个答案:

答案 0 :(得分:0)

在run方法的第二行中,目标值应该是没有括号的方法名称。

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

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