我是 python 的新手,我对 python 中的线程知之甚少。这是我的示例代码。
import threading
from threading import Thread
import time
check = False
def func1():
print ("funn1 started")
while check:
print ("got permission")
def func2():
global check
print ("func2 started")
time.sleep(2)
check = True
time.sleep(2)
check = False
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
我想要的是看到“获得许可”作为输出。但是使用我当前的代码,它不会发生。我假设 func1
线程在 func2
之前关闭更改 check
值到 True
.我怎样才能保持
func1
活?我在互联网上进行了研究,但找不到解决方案。
任何帮助,将不胜感激。
先感谢您!
最佳答案
这里的问题是 func1 在 while 循环中执行检查,发现它为 false 并终止。所以第一个线程完成而不打印“获得许可”。
我不认为这种机制是你正在寻找的。我会选择使用这样的条件,
import threading
from threading import Thread
import time
check = threading.Condition()
def func1():
print ("funn1 started")
check.acquire()
check.wait()
print ("got permission")
print ("funn1 finished")
def func2():
print ("func2 started")
check.acquire()
time.sleep(2)
check.notify()
check.release()
time.sleep(2)
print ("func2 finished")
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
这里的条件变量在内部使用互斥量在线程之间进行通信;所以一次只有一个线程可以获取条件变量。第一个函数获取条件变量,然后释放它,但注册它将等待,直到通过条件变量收到通知。然后第二个线程可以获取条件变量,当它完成了它需要做的事情时,它通知等待的线程它可以继续。
关于python - python中线程之间的数据通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51242467/