Только начинаю разбираться с потоками в python, но думаю спросить тут будет уместно) Допустим у нас такой вот код есть:
import threading
import time
def print_numbers():
for i in range(10):
print(f"Number: {i}")
time.sleep(0.5)
# Создаем поток
thread = threading.Thread(target=print_numbers)
thread.start()
# Основной поток продолжает выполнять свои задачи
print("Поток запущен!")
# Ждем, пока поток завершится
thread.join()
print("Поток завершен!")
Сколько бы я ни запускал, получаю такой вывод:
Number: 0Поток запущен!
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Number: 6
Number: 7
Number: 8
Number: 9
Поток завершен!
Процесс завершился с кодом выхода 0
Почему первая строка вывода такая? Теоретичски, что происходит в консоли: 0. Создаётся главный поток программы, который "выполняет" код построчно, на виртуальной машине. (тут если я не прав в выражениях, прошу меня поправить) 1. Создаётся поток thread. Он сразу же вызывает функцию print_numbers(), которая печатает в консоль f-строку Number: 0. По идее вот тут print должен передвинуть каретку на следующую строку, в параметрах print есть end, со значением по умолчанию '\n':
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
2. Главный поток программы выполняет свой print . print("Поток запущен!") Затем он "узнаёт" о существовании другого потока и переключается в режим ожидания? Или как это работает?
Уже на этом этапе в консоли мы получаем какую-то мешанину в потоках и видим что у нас есть '\n' в консоли
Получается главный поток не знал о существовании другого потока и вывел свой принт? А потом получается поток thread вывел остаток своей строки или как?
Огромное спасибо тебе, добрый человек!
Только начинаю разбираться с потоками в python, но думаю спросить тут будет уместно)
Допустим у нас такой вот код есть:
Сколько бы я ни запускал, получаю такой вывод:
Почему первая строка вывода такая?
Теоретичски, что происходит в консоли:
0. Создаётся главный поток программы, который "выполняет" код построчно, на виртуальной машине. (тут если я не прав в выражениях, прошу меня поправить)
1. Создаётся поток thread. Он сразу же вызывает функцию print_numbers(), которая печатает в консоль f-строку Number: 0. По идее вот тут print должен передвинуть каретку на следующую строку, в параметрах print есть end, со значением по умолчанию '\n':
2. Главный поток программы выполняет свой print . print("Поток запущен!")
Затем он "узнаёт" о существовании другого потока и переключается в режим ожидания? Или как это работает?
Уже на этом этапе в консоли мы получаем какую-то мешанину в потоках и видим что у нас есть '\n' в консоли
Получается главный поток не знал о существовании другого потока и вывел свой принт? А потом получается поток thread вывел остаток своей строки или как?