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

时间:2010-05-03 10:12:44

标签: python multithreading

我正在尝试从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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

对var的所有读/写都应该被锁定