我正在使用python做一个项目。由于我是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
的生命。
我在互联网上进行了研究,但找不到解决方案。
谁能帮我。
任何帮助将是巨大的
预先谢谢!!!!
答案 0 :(得分:1)
这里的问题是func1在while循环中执行检查,发现它为假,然后终止。因此,第一个线程无需打印“获得许可”即可结束。
我认为这种机制并不是您所需要的。我会选择使用这样的条件,
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()
这里,条件变量在内部使用互斥量在线程之间进行通信;因此,一次只有一个线程可以获取条件变量。第一个函数获取条件变量然后释放它,但是注册它要等待,直到它通过条件变量接收到通知为止。然后,第二个线程可以获取条件变量,并在完成条件所需的操作后,通知等待线程它可以继续。
答案 1 :(得分:0)
from threading import Thread
import time
check = False
def func1():
print ("funn1 started")
while True:
if check:
print ("got permission")
break
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()
答案 2 :(得分:0)
func1
必须是这样
def func1():
print("func1 started")
while True:
if check:
print("got permission")
break
else:
time.sleep(0.1)