Как мне прочитать пользовательский ввод в потоке Python? - PullRequest
0 голосов
/ 03 мая 2010

Я пытаюсь прочитать из потока в 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 ]

1 голос
/ 03 мая 2010

Ваш код немного странный. Если вы используете ридер строго для выхода из программы, почему бы не оставить его вне кода многопоточности? Он не должен быть в потоке для ваших целей и не будет работать в потоке.

Несмотря на это, я не думаю, что вы хотите пойти по этому пути. Рассмотрим эту проблему: несколько потоков перестают запрашивать ввод одновременно, и пользователь вводит данные. К какой теме это должно идти? Я бы посоветовал реструктурировать код, чтобы избежать этой необходимости.

0 голосов
/ 03 мая 2010

Также все чтение / запись в var должны быть заблокированы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...