我试图创建一个简单的python脚本,该脚本具有2个主要功能:在循环中打印某些内容,然后等待键盘中断停止该循环。 我阅读了有关线程的文章,并尝试对其进行测试,但它对我不起作用。 下面是我的代码。 我创建了2个线程,一个线程循环打印某些内容,另一个线程等待退出命令。 我的代码中有2个问题,我也不知道为什么:
首先,循环线程将不会打印任何内容,直到我按Enter键才能使另一个线程完成。如果我将输入函数写入主程序,也会发生这种情况。
第二,即使我输入100并且程序显示“ Exiting ...”,即使执行将其设置为1的代码,退出时间也永远不会设置为1。
我的程序:
#!/usr/bin/python
import threading
import time
exittime = 0
def lop():
while (1):
if (exittime == 1):
print("Thread Exiting...")
return
print("I am a thread!\n")
time.sleep(1)
def ask():
temp = input("Press Enter to continue...")
if (temp == "100"):
exittime = 1
print("Exiting...")
t = threading.Thread(target = ask)
t.daemon = True
t.start()
a = threading.Thread(target = lop)
a.daemon = True
a.start()
输出:
>>> Press Enter to continue...I am a thread!
100
pressed enter!1
100! Exiting...
I am a thread!
2
I am a thread!
3
print(exittime)
0
为什么我的线程无法在其循环上继续工作,而是在等待另一个线程? 正确写入100并获得“ Exiting ...”输出后,为什么退出时间未设置为1?
感谢您的帮助!
答案 0 :(得分:0)
即使我没有按Enter键,lop函数对我来说也运行良好。从输出中可以看到
Press Enter to continue...I am a thread!
I am a thread!
I am a thread!
I am a thread!
在我输入100
之前。
我使用的代码如下。如果您在控制台中运行,则join()
不会有任何改变。
import threading
import time
exittime = 0
def lop():
while (1):
if (exittime == 1):
print("Thread Exiting...")
return
print("I am a thread!\n")
time.sleep(1)
def ask():
global exittime
temp = input("Press Enter to continue...")
if (temp == "100"):
exittime = 1
print("Exiting...")
t = threading.Thread(target = ask)
t.daemon = True
t.start()
a = threading.Thread(target = lop)
a.daemon = True
a.start()
t.join()
a.join()
输出:
Press Enter to continue...I am a thread!
I am a thread!
I am a thread!
I am a thread!
>? 100
Exiting...
Thread Exiting...
答案 1 :(得分:0)
这可能是python版本问题,甚至是线程的IDLE问题。您可以使用
try:
...code...
except KeyboardInterrupt:
...exit...
相反。