Python, составить многопоточный код

Приложение которое создает 3 потока и они должны бесконечно одновременно выполнять это

  1. print ("1 секунда") (каждую секунду)
  2. print ("2 секунды") (каждую 2 секунды)
  3. print ("3 секунды") (каждую 3 секунды) при помощи библиотеки threading

вот как получилось у меня но почему-то в терминале выводится только "1"

import time
from threading import Thread
a = 1


def potok1():
  a = 1


while a == 1:
  time.sleep(1)
  print('1 cекунда')


def potok2():
  a = 1


while a == 1:
  time.sleep(2)
  print('2 секунды')


def potok3():
  a = 1


while a == 1:
  time.sleep(3)
  print('3 секунды')
th = Thread(target=potok1, args=())
th1 = Thread(target=potok2, args=())
th2 = Thread(target=potok3, args=())
th.start()
th1.start()
th2.start()
th.join()
th1.join()
th2.join()


Ответы (2 шт):

Автор решения: eri

выводится только "1" потому что программа завершила главный поток.

добавьте

th.join()
th1.join()
th2.join()
→ Ссылка
Автор решения: CrazyElf

Табуляции в питоне критически важны. Такой код просто висит на цикле while и не идёт дальше:

a = 1

def potok1():
  a = 1

# дальше отступ такой же, какой был у начала описания функции
# так что питон считает, что функция кончилась
# и следующий код находится уже вне функции,
# выполняется он сразу, а не когда вызывается функция

while a == 1: # <-- ВЫПОЛНЕНИЕ КОДА ЗАСТРЕВАЕТ ЗДЕСЬ!!!
  time.sleep(1)
  print('1 cекунда')

Правильно должно быть так - отступ у блока while должен соответствовать отступу внутри функции, это касается и остальных функций. Тогда цикл while попадёт внутрь функции, выполнение кода дойдёт до потоков, они запустятся:

a = 1

def potok1():
  a = 1

  while a == 1:
    time.sleep(1)
    print('1 cекунда')
→ Ссылка