Pull to refresh
1
Богдан Масленников@chvk_speedrun

люблю макдональдс

Send message

Только начинаю разбираться с потоками в 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 вывел остаток своей строки или как?

Information

Rating
6,212-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

поломойка
Ведущий