@Jotyu

Как запустить одновременно два потока Python?

from threading import Thread
from time import sleep

from threading import Thread
from time import sleep
def func():
    print("h", end = "") #ДОЧЕРНИЙ ПОТОК
    print("e", end = "") #ДОЧЕРНИЙ ПОТОК
    print("l", end = "") #ДОЧЕРНИЙ ПОТОК
    print("l", end = "") #ДОЧЕРНИЙ ПОТОК
    print("o", end = "") #ДОЧЕРНИЙ ПОТОК

th1 = Thread(target=func)
th1.start()

print("h", end = "") #ВЫПОЛНЯЕТСЯ В main thread
print("e", end = "") #ВЫПОЛНЯЕТСЯ В main thread
print("l", end = "") #ВЫПОЛНЯЕТСЯ В main thread
print("l", end = "") #ВЫПОЛНЯЕТСЯ В main thread
print("o", end="")   #ВЫПОЛНЯЕТСЯ В main thread

#ВЫВОД: hheelllolo
-----------------------------------------------------------------------
#А КОГДА ЗАПУСКАЮ 2 ПОТОКА ВЫВОДИТ:

from threading import Thread
from time import sleep

from threading import Thread
from time import sleep
def func():
    print("h", end = "") #ДОЧЕРНИЙ ПОТОК
    print("e", end = "") #ДОЧЕРНИЙ ПОТОК
    print("l", end = "") #ДОЧЕРНИЙ ПОТОК
    print("l", end = "") #ДОЧЕРНИЙ ПОТОК
    print("o", end = "") #ДОЧЕРНИЙ ПОТОК

th1 = Thread(target=func)
th2 = Threa(target=func)

th1.start()
th2.start()

#ВЫВОД: hello
#       hello
#**КАК ЗАПУСТИТЬ ОДНОВРЕМЕННО ДВА ПОТОКА?**
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
@bacon
Скорее всего функция func выполняется настолько быстро, что до переключение потоков и не доходит
ЗЫ раздели print "долгими" операциями
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
В CPython есть проблема - в один момент времени исполняется всегда один поток, даже если ядер у проца несколько. Так что "одновременно" на питоне запустить два потока проблематично. Они будут чередоваться, исполняясь по кусочкам. Исключение - если поток ждёт завершения операции ввода-вывода, или чего-то подобного, т.е. не исполняет непосредственно код на питоне. Тогда он не блокирует другие потоки.

При этом нет никаких гарантий насчёт порядка их исполнения. Когда ОС решит переключиться с одного потока на другой - ты не контролируешь. У меня, например, твой первый код тоже выводит "hellohello".

Так что да, твой код выполняется настолько "одновременно", насколько это возможно.
Ответ написан
@link_vrb
1) Ты два раза импортируешь обе библиотеки
2) в строке th2=... у тебя вместо Thread написано Threa
3) у меня вывод hellohello после корректировки твоего кода, а если у тебя не такой вывод, то не в коде проблема
Ответ написан
Ваш ответ на вопрос

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

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