Python线程既不退出也不“线程化”

时间:2019-02-27 07:36:45

标签: python multithreading

我试图创建一个简单的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?

感谢您的帮助!

2 个答案:

答案 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...

相反。