如何在Python线程中读取用户输入?

问题描述:

我试图从一个线程在python内容如下如何在Python线程中读取用户输入?

import threading, time, random 

var = True 

class MyThread(threading.Thread): 
    def set_name(self, name): 
     self.name = name 

    def run(self): 
     global var 
     while var == True: 
      print "In mythread " + self.name 
      time.sleep(random.randint(2,5)) 


class MyReader(threading.Thread): 
    def run(self): 
     global var 
     while var == True: 
      input = raw_input("Quit?") 
      if input == "q": 
       var = False 



t1 = MyThread() 
t1.set_name("One") 

t2 = MyReader() 

t1.start() 
t2.start() 

但是,如果我输入“Q”,我看到下面的错误。

In mythread One 
Quit?q 
Exception in thread Thread-2: 
Traceback (most recent call last): 
    File "/usr/lib/python2.6/threading.py", line 522, in __bootstrap_inner 
    self.run() 
    File "test.py", line 20, in run 
    input = raw_input("Quit?") 
EOFError 

In mythread One 
In mythread One 

如何从线程获取用户输入?

你的代码有点奇怪。如果您严格使用阅读器退出程序,为什么不完全在线程代码之外使用它?它不需要在线程中,出于您的目的,并且不会在线程中工作。

无论如何,我不认为你想走这条路。考虑这个问题:多个线程停止同时请求输入,并且用户输入输入。它应该去哪个线程?我建议重组代码以避免这种需求。

同样所有对var的读取/写入都应该锁定