Я пытаюсь сделать программу Python, которая будет очень похожа на оболочку: в основном ждет ввода пользователя, изредка отображая сообщение из другого потока.Многопоточная программа, которая имитирует оболочку
Имея это в виду, я сделал следующий пример кода:
import threading
import time
def printSomething(something="hi"):
while True:
print(something)
time.sleep(2)
def takeAndPrint():
while True:
usr = input("Enter anything: ")
print(usr)
thread1 = threading.Thread(printSomething())
thread2 = threading.Thread(takeAndPrint())
thread1.start()
thread2.start()
Что я ожидал, чтобы это произошло
пользователю предлагается для ввода; иногда это приводит к тому, что их сообщение выводится, в других случаях сначала печатается сообщение printSomething
.
Enter anything:
hi
Enter anything: hello
hello
Enter anything:
hi
Что на самом деле произошло
Оказывается, что только printSomething
работает:
hi
hi
hi
Что мне нужно сделать, чтобы иметь непрерывную подсказку для ввода данных пользователя, а также вывод на печать сообщений из другой нити при необходимости?
ОК хорошо ... намного лучше, чем мой ответ: P .... хотя, возможно, вы должны сохранить спойлер в качестве учебного упражнения для пользователя: P (+1) –
Спасибо за вашу помощь. Если я сначала запускаю 'thread2' вместо' thread1', он все равно выполняет список 'hi'. – fdsa
@fdsa - снова, ** 'start' никогда не доходит **. Неважно, в каком порядке вы их запускаете, но какой заказ вы * назначаете * их. Пожалуйста, внимательно прочитайте мой ответ. – jonrsharpe