Python, составить многопоточный код
Приложение которое создает 3 потока и они должны бесконечно одновременно выполнять это
- print ("1 секунда") (каждую секунду)
- print ("2 секунды") (каждую 2 секунды)
- 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екунда')