Threading Python # 1. Multithreading in Python with simple examples

Sdílet
Vložit
  • čas přidán 25. 07. 2024
  • Let's take a look at Python processes and threads using simple examples.
    You will learn how processes differ from threads, in which cases it is worth using this or that technology. We'll cover threading, synchronization, and resource issues.
    We will also consolidate the obtained material in practice and write a program using streams, along the way considering all the methods and attributes for working with them.
    ⭐ Free version of Kite: bit.ly/3cKz97C
    ⭐ All our Python courses: stepik.org/users/267872376/teach
    ⭐ Channel with useful material: t.me/codeblog8
    📁 Github: github.com/Zproger
    📁 All playlists with lessons: bit.ly/39GaY89
    📁 Contact me: zproger777@gmail.com
    📁 Support channel: www.donationalerts.com/r/zproger
    Timecodes:
    00:00 - What will happen in this video?
    0:44 - Processes and Threads. What is the difference
    2:34 - Problems when using streams
    4:08 - Deadlocks. Deadlock in Python streams
    4:52 - Putting Streams in Practice
    5:08 - Run the function in a separate thread and consider the attributes
    7:50 - Get the name and other attributes of the running thread
    8:24 - Checking the health of the thread together with MainThread
    9:34 am - Get all running threads and check the work status
    10:25 - Parse the structure of running threads
    11:16 - Get the object of the main thread MainThread
    11:35 - Set the name of the stream on the fly
    12:06 - We are waiting for the execution of the thread. Using Join

Komentáře • 87

  • @zproger
    @zproger  Před 2 lety +22

    Именно от количества лайков и комментариев я понимаю что нужно
    продолжать делать видео. Не забывайте проявлять свою активность :)

  • @MrBrigadierArchived
    @MrBrigadierArchived Před rokem +1

    Спасибо за уроки! Полезно, кратко и по фактам. Очень помогло.

  • @ArtemOriginativeAClub
    @ArtemOriginativeAClub Před 2 lety +4

    Супер, спасибо за доходчивую подачу. Иду смотреть дальше

  • @ukrmapper
    @ukrmapper Před 2 lety +6

    Как только начинаю искать новый материал, выходит твоё подходящее видео! Спасибо

    • @zproger
      @zproger  Před 2 lety +2

      Рад что получается угадывать нужный материал) Спасибо

  • @fsoky
    @fsoky Před 2 lety +5

    *Очень полезно, спасибо.*

  • @Alikhan-xm1xq
    @Alikhan-xm1xq Před rokem +1

    Спасибо огромное, комментарий для продвижения!

  • @TheNikita
    @TheNikita Před 2 lety +1

    Все понятно)

  • @goshaposhlyy
    @goshaposhlyy Před 2 lety +2

    ооо , интересно , познавательно , лайк , подписка , колоколтчик

  • @ertargn
    @ertargn Před 2 lety +2

    Спасибо за урок, существует много книг по питон, но там мало освещяет эту тему

  • @vestzeud2056
    @vestzeud2056 Před rokem +2

    спасибо за труд! посмотрел один раз, пока почти ничего не понял

  • @konstantinkolmogortsev8724

    7:10 на мой взгляд, удобнее вызывать через threading.Thread(target=lambda *_: get_data("b", time.time)).start(), потому что не приходится возиться с именованным параметром

    • @antondopira5957
      @antondopira5957 Před rokem

      его же можно вообще не указывать

  • @domochevsky4703
    @domochevsky4703 Před 2 lety +8

    Очень хорошо, хотелось бы больше практических примеров, чтобы выглядело естественно, а также ссылочки на какие-нибудь статьи или книги, где хорошо описана тема из урока.
    Спасибо за него, успехов.

    • @zproger
      @zproger  Před 2 lety

      Благодарю

    • @alex_konor2197
      @alex_konor2197 Před 2 lety

      Хорошо, что прочёл твой комментарий до просмотра. Без примеров это видео для меня бесполезно.
      Спасибо тебе чел🤗

  • @Stich7777777777
    @Stich7777777777 Před 2 lety

    Пушка

  • @flueriexeflueriexe7040
    @flueriexeflueriexe7040 Před 2 lety +7

    Здравствуйте! Нихуя не понял, но очень интересно. Спасибо.

  • @KikrAzz
    @KikrAzz Před rokem +2

    thanks

  • @user-mn3xi2oh7d
    @user-mn3xi2oh7d Před 8 měsíci

    Здравствуйте. Подскажите пожалуйста, как с помощью потока запустить выполнение асинхронной функции, внутри которой есть обращение к ещё одной асинхронной функции?

  • @worldtech2770
    @worldtech2770 Před rokem +1

    Подскажите пожалуйста , есть написанный скрипт, он каждый час парсит цены с одного магазина. и записывает в переменную в виде словаря, как сделать так что бы, если пользователь в телеграмме при выборе команды /мониторить ,скрипт каждый час проверял переменную и если по заданным настройкам есть данные то , пользователю присылать эти данные с словаря. У каждого пользователя свои настройки по товарам. Использую aiogram Спасибо

    • @Nicktimes
      @Nicktimes Před rokem +1

      Хуе его знает

  • @user-fk2cq4ff4k
    @user-fk2cq4ff4k Před 2 lety +2

    Топчик

    • @zproger
      @zproger  Před 2 lety

      Благодарю :)

    • @user-fk2cq4ff4k
      @user-fk2cq4ff4k Před 2 lety +4

      @@zproger я прям ждал этого, если еще будет про асинхроность - что это такое, как это работает, и что делать если надо асинхронно, но внутри есть синхронные функции. Даже задоначу косарик, вообще не жалко

    • @zproger
      @zproger  Před 2 lety +1

      после этого курса как раз планировался курс по асинхронности :)

    • @user-re1ri9jp3e
      @user-re1ri9jp3e Před 2 lety

      @@zproger asyncio aiohttp aiostream 👍😁

  • @user-yx5hl6en5c
    @user-yx5hl6en5c Před 2 lety

    на 8,56 видно что основной поток и созданный отдельно работают параллельно. Но у меня так не получается. Сначала новый после .start(), потом основной продолжает

  • @kirillstepankov
    @kirillstepankov Před rokem +10

    Большое количество ошибок в ролике, люди, которые впервые встречаются с многопоточностью в питоне будут иметь неправильное представление работы потоков, джоинов. Надо было как минимум объяснить почему если у нас есть GIL, то исполняя программы из видео многопоточность все-таки как будто существует, рассказать про то, что на самом деле делает функция time.sleep() и другие блокирующие поток функции.

  • @flueriexeflueriexe7040
    @flueriexeflueriexe7040 Před 2 lety +3

    А еще, мил человек, я вот как опытный программист со стажем, освоивший лист компрехеншонсы, хотел бы узнать у вас, в чем разница между многопоточностью и асинхронностью и как они оба в плане секса? А? М? Спасибо, жду нового видео!

    • @zproger
      @zproger  Před 2 lety

      :/

    • @pashamix
      @pashamix Před 2 lety

      че ты такой язвительный? А? М? Спасибо, жду новый комментарий!

  • @georgeseletski8241
    @georgeseletski8241 Před 2 lety +2

    У меня такой вопрос почему очень часто в перечисление аргументов функции ставиться запитая, как например:
    threading.Thread(target=get_data, args=(str(time.time()), i,), name = f"thr-{i}")
    почему после i запитая?

    • @zproger
      @zproger  Před 2 lety +1

      потому что в args передается кортеж

    • @gordeytsy283
      @gordeytsy283 Před rokem +2

      @@zproger Че, в случае если нужно в кортеже иметь один объект, то ставится запитая, но в случае двух и более нужны лишь разделяющие запятые, или я что то не понимаю?
      Пруф:
      a = (1,)
      b = (1)
      c = (1,2,)
      d = (1,2)
      print(f"a: {type(a)}", f'b: {type(b)}', f'c: {type(c)}', f"d: {type(d)}", sep="
      ")
      output:
      a:
      b:
      c:
      d:

    • @gpankov
      @gpankov Před rokem

      @@zproger обязательно кортеж? а список?

    • @user-wz2ix2eq4i
      @user-wz2ix2eq4i Před 10 měsíci

      @@gpankov Thread args принимает итерабельные обьекты. Тобишь, и список и кортеж тут работают

    • @user-wz2ix2eq4i
      @user-wz2ix2eq4i Před 10 měsíci

      @@gordeytsy283 видимо из-за того что () также используются и в операциях вычисления. К примеру (3+3) * 9. А так, если там стоит запятая, то скобки уже воспринимаются как обьект кортеж

  • @Dvoini
    @Dvoini Před rokem

    как с потока ответ получить?

  • @possibly_unknown
    @possibly_unknown Před rokem

    Как создавать настраиваемое количество потоков просто задавая их количества ане экземпляр?

  • @dmitriynayanov6428
    @dmitriynayanov6428 Před rokem

    Почему на 14:30 выводится [thr-1], [thr-2], [thr-2]? Дважды выводится с номером 2, и где thr-0?

  • @alexeyb3121
    @alexeyb3121 Před 2 lety

    Если я запустил программу, например по бесконечному пребавлению (1000+1+1+1...), и запустил второй экземпляр программы где я пребавляю (2000+1+1+1...), будет ли это считаться, что я запустил два потока?

    • @user-pn2zm1ob2k
      @user-pn2zm1ob2k Před rokem

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

  • @smartbox2445e
    @smartbox2445e Před 2 lety +6

    Пришлось несколько раз пересматривать. С первого раз вообще ничего не понятно, очень сложно.

    • @zproger
      @zproger  Před 2 lety +2

      Ага, эта тема не всегда сразу воспринимается, нужно немного времени и попыток

  • @hopelesssuprem1867
    @hopelesssuprem1867 Před 2 lety +1

    не подскажите где можно изучить асинхронность, а то я в нете ниче толкового не могу найти

    • @zproger
      @zproger  Před 2 lety

      Официальная документация, ну и кроме этого есть много статей

    • @hopelesssuprem1867
      @hopelesssuprem1867 Před 2 lety

      @@zproger эх, жаль что приходится по кускам собирать)

  • @user-qt9cc3pl1d
    @user-qt9cc3pl1d Před 2 lety

    def __init__(self, group=None, target=None, name=None,
    args=(), kwargs=None, *, daemon=None):
    * - что это значит? можете ссылку кинуть где почитать?

  • @user-fk2cq4ff4k
    @user-fk2cq4ff4k Před 2 lety +1

    Последний пример с поочередным выполнением потоков можно сделать с помощью асинхронности? Если да - то какая разница?

    • @zproger
      @zproger  Před 2 lety +1

      Асинхронность работает абсолютно по-другому, когда будет курс на эту тему я рассмотрю разницу

  • @ivanbilinchuk9155
    @ivanbilinchuk9155 Před 2 lety +1

    лучше использовать потоки из pyqt/pyside там больше контроля над потоками есть

    • @zproger
      @zproger  Před 2 lety

      Ну это лучше в Qt проекте, но в обычной cli программе это не уместно, кстати про сигналы также будет видео :)

  • @drdizel777
    @drdizel777 Před 2 měsíci

    Я как новичок, честно ничего не понимаю, такое ощущение что ты делишься своими знаниями делишься со своими коллегами которые так же все это знают -_-

  • @firstandlast4435
    @firstandlast4435 Před rokem +1

    Про args вообще не понял, что это и зачем нужно.
    Upd. Возможно понял. Так как в target мы передаем объект функции, то в args мы передаем аргументы с которой нужно вызвать эту функцию, правильно?

    • @zproger
      @zproger  Před rokem

      Да, все верно

  • @PlayTheGames2
    @PlayTheGames2 Před rokem +1

    без библиотек можно вот так:
    while True:
    a=1
    while a==1:
    a=0
    print("test")
    while a==0:
    a=1
    print("test1")

    • @PlayTheGames2
      @PlayTheGames2 Před rokem

      ничего сложного как по мне, только это не совсем многопоточность, а аналог этого

    • @zproger
      @zproger  Před rokem +1

      Мне показалось, или это отсылка к GIL?)

    • @PlayTheGames2
      @PlayTheGames2 Před rokem

      @@zproger я видео не полностью смотрел, лень было)И этот код нужен что несколько циклов бесконечных не останавливали другие, так что смысл от этого есть

  • @tututu6425
    @tututu6425 Před měsícem

    Почему так мало просмотров у таких более сложных тем? Людям что потоки не нужны😂

    • @zproger
      @zproger  Před měsícem

      Вот этот фактор и отталкивает снимать сложные темы, они как правило никому не интересны, если даже сейчас с аудиторией в 110к подписчиков я сделаю к примеру какой-то бесплатный курс по асинхронности, то на видео будет по 800 просмотров, поэтому смысла от таких видео нет.

  • @denissunyaev3119
    @denissunyaev3119 Před rokem

    Создать поток, вызывающий функцию с print это понятно. А если мне нужно создать поток, который вызывает функцию, возвращающую результат, и с этим результатом потом работать.

  • @d.8663
    @d.8663 Před rokem

    Всё хорошо, но было бы отлично если б была более четкая дикция...Много слов слышны только наполовину, так как они съедаются в попытке быстрее донести информацию. В итоге вместо того, чтоб на ходу переваривать услышанное, приходится перематывать назад и разбирать, что же вообще было за слово сказано: двойная работа, от которой быстро закипает мозг)) Лучше говори помедленнее, но чётко, а потом ускорь при обработке.

  • @Sasha-ub7pz
    @Sasha-ub7pz Před 2 lety +2

    Вспомнил JS: потоки умеют нагружать CPU и спать , а асинхронность заставляет 1 ядро за все потоки работать.
    Так что не надо своих демонов пропагандировать, помню бота на сервак поставил с ними и он , после второго клиента, не проснулся...

    • @zproger
      @zproger  Před 2 lety

      Потоки это всего лишь инструмент и он применяется только по назначению, ту же асинхронность тоже далеко не везде будет правильно использовать

  • @sofiaochkalova6931
    @sofiaochkalova6931 Před rokem +1

    тяжело... смотрела на скорости 0.8
    очень бы хотелось видеть вместо футажей в начале слайды, которые бы +- дублировали устный текст
    футажи отвлекают, а тема и так не простая

    • @zproger
      @zproger  Před rokem +1

      Спасибо, учту

    • @sofiaochkalova6931
      @sofiaochkalova6931 Před rokem

      @@zproger Спасибо вам за полезные видео!

  • @user-bc9ep5cx3m
    @user-bc9ep5cx3m Před 8 měsíci

    Есть просьба излагать материал чуть медленнее. У вас очень быстрый говор. Я понимаю, когда человек владеет информацией, он может быстро излагать мысли. Но для того, кто впервые смотрит видео, приходится пересматривать по несколько раз, чтобы уловить и код и слова.

  • @user-pn2zm1ob2k
    @user-pn2zm1ob2k Před rokem

    Потоки почему-то легко зашли и на питоне и на с++, а вот асинхронность разными способами я с трудом тяну. Странная хрень🤡

  • @user-jf3rv6kh3l
    @user-jf3rv6kh3l Před měsícem

    нихрена не поняла😂

  • @GqqdArt
    @GqqdArt Před 7 měsíci

    Совсем простые примеры 😂😂😂 вы бля иждеваетесь

    • @zproger
      @zproger  Před 7 měsíci

      Разве нет?)

  • @Webian
    @Webian Před 6 měsíci +1

    Мультипроцесність а не мультипроцесорність