Я работаю с сетевым скриптом, чтобы иметь два потока, которые проверяют отправку и получение данных от клиента. Внутри основного кода есть цикл, который ожидает ввода пользователя и ставит в очередь результат для отправки.
Я изменил его так, чтобы вместо получения только одного raw_input (который работает) я добавил три новых вызова raw_inputкоторые ждут внутри бесконечных циклов while, чтобы проверить правильность ввода. Как только это соединено, сообщение помещается в очередь в потоке отправки. Иногда сообщения будут отправляться, но в других случаях при правильном вводе они будут останавливаться, а затем выбрасывать ложный минус.
Вот как я отправляю внутри SendThread:
def run(self):
self.current_thread = threading.currentThread()
while True:
messages = self.state.get_message()
sendmessage()
Это то, что яраньше и работал:
#Here i start the send and listen threads with .start()
def main():
while true:
message = raw_input("Put in input")
state.queue_new_message(message) #basically puts the message into a state object initialized with message_q = []
Но затем я добавил функцию с именем x (), которая является единственной функцией цикла while в main () (код выше):
def x():
pickName()
pickCar()
pickModel()
#set globals and use them below
message = a + "" + b + "" + "" + c
state.queue_new_message(message)
с pickName () это тот же формат, что и pickCar и pickModel
def pickName()
while true:
name = raw_input("Name")
if name not something:
print error
else:
break
global name2
a = name
Теперь, когда я запускаю код, иногда он будет работать, а иногда, когда я буду вводить действительный ввод, он будет зависатьпока я не нажму клавишу ввода, а затем распечатать сообщение об ошибке. Я в недоумении, почему это происходит прямо сейчас. Когда я подключаюсь к своему клиенту, это единственный раз, когда это происходит, когда я работаю без каких-либо сетевых подключений (потоков), тогда ввод и вывод raw_inputs работают гладко и, как и ожидалось. Я хотел бы 100% производительности в этом, и сейчас всегда есть шанс, что он не будет работать, пока вы не введете одно и то же значение несколько раз. Любая помощь будет оценена. Thx!