@zlodiak

Почему потоки перемешиваются?

Вот код, который создаёт несколько потоков и запускает их все через 3 секунды:

import random
import time
from threading import Thread
 
class MyThread(Thread):  
    def __init__(self, name):
        Thread.__init__(self)
        self.name = name
    
    def run(self):
        amount = 3
        time.sleep(amount)
        msg = "%s is running" % self.name
        print(msg)
    
def create_threads():
    for i in range(5):
        name = "Thread #%s" % (i+1)
        my_thread = MyThread(name)
        my_thread.start()
 
 
if __name__ == "__main__":
    create_threads()


Видно, что порядок каждый раз разный:
kalinin@md ~/python/project1 $ python3 ./index.py
Thread #3 is running
Thread #1 is running
Thread #2 is running
Thread #4 is running
Thread #5 is running
kalinin@md ~/python/project1 $ python3 ./index.py
Thread #1 is running
Thread #2 is running
Thread #3 is running
Thread #4 is running
Thread #5 is running
kalinin@md ~/python/project1 $ python3 ./index.py
Thread #3 is running
Thread #2 is running
Thread #1 is running
Thread #5 is running
Thread #4 is running
kalinin@md ~/python/project1 $ python3 ./index.py
Thread #1 is running
Thread #2 is running
Thread #5 is running
Thread #3 is running
Thread #4 is running


Мне кажется, это странно и непонятно потому что потоки запускаются по мере создания, причём у каждого есть одинаковая задержка. Следовательно их порядок не должен меняться, но он меняется. Помогите пожалуйста понять почему.

ps:
однако, если закомментировать строку
time.sleep(amount)
, то порядок будет сохраняться.
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы