Вот код, который создаёт несколько потоков и запускает их все через 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)
, то порядок будет сохраняться.