Я новичок в потоках и многопроцессорности. У меня есть некоторый код, в котором я начинаю процесс, и я хотел выход, чтобы показать активное состояние ожидания чего-то вроде этогоНити и строки Python
wating....
Код похож на это ниже:
импорт резьб времени
импортаclass ThreadExample(object):
def __init__(self):
self.pause = True
threading.Thread(target=self.second_thread).start()
# Some other processes
print("Waiting", end="")
while self.pause:
time.sleep(1)
print(".", end="")
print("Hooray!")
def second_thread(self):
print("timer started")
time.sleep(3)
self.pause = False
print("timer finished")
if __name__ == "__main__":
ThreadExample()
Когда я запускаю код выше, я получаю выход:
timer started
Do something else..timer finished
.
Hooray!
не большой сюрприз, за исключением того, что в начале появляется только «таймер», а остальная часть текста появляется в конце в конце.
Если изменить линию печати (" " конец =" ") для печати ("."), Получаем следующий вывод:
timer started
Do something else.
.
timer finished
.
Hooray
, где появляются точки шагом в 1 секунду, который был моим намерением.
Есть ли способ получить «Ожидание ...» на одной линии без конца = «»?
И, во-вторых, я предполагаю, что это связано с внутренними функциями функции print(), а если нет, следует ли выполнять потоки другим способом? Я не думаю, что проблема в GIL, поскольку я пробовал многопроцесс.Процесс и получил тот же результат.
Примечание: на современном Python (3.3 и выше) ['print' может быть передан' flush = True', чтобы сделать его завершенным после печати] (https://docs.python.org/3/library/functions. html # print), сохраняя при этом полную мощность/гибкость функции 'print'. Поэтому 'print (end = '.', Flush = True)' или 'print ('.', End = '', flush = True)' также будет делать трюк. – ShadowRanger
Спасибо, это очень полезно. – VectorVictor