Параллельное программирование на Python

Поділитися
Вставка
  • Опубліковано 19 лют 2021
  • Курс из 15 занятий, читается весной 2021 года в МФТИ, школа ЛФИ, 2 курс.
    Тема 3-го занятия: Параллельное программирование на Python.
    Материалы курса: github.com/tkhirianov/pydatan
    Telegram-канал для общения вольнослушателей: t.me/tkhirianov_data_analysis...
    Спонсировать канал: / tkhirianov или www.paypal.me/tkhirianov
    Вместо спонсорства мне предлагаю помочь Тимофею 7 лет из Набережных Челнов восстановить ухо: bolshie-dela.com/podarite-voz...

КОМЕНТАРІ • 123

  • @iritaka
    @iritaka 3 роки тому +50

    Тайм-коды: многопоточность, асинхронность, Thread, Очередь/Queue, GIL
    0:00 Однопоточность. Последовательное программирование, где 1 исполнитель
    4:26 чередование (interleaving). Планировщик задач
    13:02 смысл чередования
    14:14 ядро. Работа с отложенными задачами, не зависает
    22:10 несколько ядер
    23:50 цели параллельного программирования:
    24:51 1) интерактивность, 2) скорость вычисления
    27:20 CPU Генератор частоты
    32:10 2 способа увеличить скорость вычислений: 1) много ядер или процессоров. Система с общей памятью
    37:17 2) много вычислительных систем (распределённая). Система с разделённой памятью. Бывают: - гомогенные (кластер/фабрика) - гетерогенные (вычислительная сеть, по network)
    41:01 Параллельность
    43:14 схемы взаимодействия процессов:
    44:08 1) shared memory (общая память)
    47:18 (-) критическая секция программного кода (двойное вычисление) heisenbug (гейзенбаг) плавающая ошибка
    52:15 как решить: Блокировки. Нужна ОС. Mutual exclusion (взаимные исключения) mutex
    57:52 разная организация общей памяти
    58:35 Queue Очереди
    58:58 Pipe очередь символьная. Низкоуровневые сокеты
    1:00:55 параллельный алгоритм затратен и требует сложной отладки (в возможных багах)
    1:02:04 отладка параллельных систем. В очередях берет на себя - библиотека ЯП
    1:09:02 2) другой, проще способ - взаимодействие процессов: main thread. Нити Исполнения
    1:12:42 получение результата из треда - join() присоединение нити
    1:15:05 у каждой нити свой стэк. Синхронный и асинхронный вызов
    1:16:14 взаимодействие между нитями автоматически происходит через shared memory, мы можем и там организовать очередь для взаимодействия без блокировок. Библиотека очередь queue
    1:17:53 GIL (Global Interpreter Lock) в Питоне. Глобальная блокировка интерпретатора. Утечка памяти (memory leak)
    1:26:55 (+) интерактивность
    1:28:51 Практика. Презентация Многопоточность в Python: 1) Поток и процесс, 2) Передача данных между потоками при помощи pipe и общей памяти, 3) GIL, 4) Асинхронное выполнение потоков, 5) Библиотеки threading, multiprocessing, asyncio
    1:29:00 Питон - язык не для параллельного программирования. Но в стандартной библиотеке есть:
    1:29:40 1) низкоуровневые нити _thread - Low-level threading API 2) высокоуровневый threading
    1:30:54 Код. Создание нитей (потоков) и процессов
    1:34:34 получение результата с нити. Запуск потока с применением threading
    1:35:30 (+) отдельная возможность - запускать и отдельно - передавать параметры
    1:36:34 Глобальные переменные - это великое зло для параллельного программирования. Это скрытая критическая секция
    1:42:28 передача данных между потоками при помощи pipe и общей памяти Queue
    1:43:11 есть очереди, предназначенные для взаимодействия уже самих вычислительных процессов. А есть - для нитей
    1:43:27 библиотека queue для threaded programming (передача информации между нитями)
    1:44:16 очередь для разных вычислительных процессов multiprocessing.Queue
    1:44:20 когда разные вычислительные процессы у нас работает одновременно несколько интерпретаторов Python. (+) производительность
    1:45:00 Код. put и get (давать и брать) в/из очереди
    1:47:25 Pipe - структура данных для связи между процессами в multiprocessing
    1:53:33 Менеджер - класс многопроцессорных модулей, обеспечивающий общую информацию
    1:55:30 Заключение. Ограниченный ресурс параллельности. Возможность параллелизации. Зависимость от данных. Начать вычисление может только 1 актор. При максимальной эффективности
    Скачать конспект: www.patreon.com/iritaka

  • @valentin3241
    @valentin3241 Рік тому +17

    Гениальный преподаватель. С горящими глазами, юмором, уместными метафорами! Нет слов, браво!

  • @mmm43kir
    @mmm43kir 3 роки тому +26

    Пишет "параллельное программирование" не отвлекаясь на свои слова. Это реальный пример такого программирования.

  • @fanlug
    @fanlug 3 роки тому +71

    10 выпавших блоков питания из 10

  • @denisbaranoff
    @denisbaranoff 3 роки тому +15

    Как всегда - превосходен 👏 Особенно, хотелось отметить особый талант лектора

  • @olegger7436
    @olegger7436 3 роки тому +12

    Просто замечательная подача информации. Ждем продолжения, тема очень интересная

  • @pomapoma6643
    @pomapoma6643 3 роки тому +7

    Ваши лекции прекрасны!

  • @MrMegaNatural
    @MrMegaNatural 3 роки тому +5

    Спасибо Тимофей, всегда с большим удоволствием смoтрю ваши лекции!

  • @user-yq1yd7nx8g
    @user-yq1yd7nx8g 3 роки тому +23

    Шикарное объяснение, спасибо вам

  • @skrskrbam
    @skrskrbam 3 роки тому +5

    как быстро время летит, попал на ваше видео 2017 года, а вы все также молоды👍🏿

  • @dimaalexeenko3669
    @dimaalexeenko3669 3 роки тому +13

    Крутой канал, мужику респектище, знает своё дело

  • @maxbespontoff2771
    @maxbespontoff2771 3 роки тому +4

    Великолепная подача информации. Мое вам почтение.

  • @user-ih4mc1je1o
    @user-ih4mc1je1o 3 роки тому +16

    Тимофей Федорович, большое спасибо за ваши лекции, очень интересно и очень полезно

    • @dmitriyvaulin
      @dmitriyvaulin 2 роки тому

      но не особо точно :)

  • @act0r399
    @act0r399 3 роки тому +2

    Вот это я понимаю любовь к своему делу, прекасно)) Спасибо Вам Тимофей))

  • @sergeyv1534
    @sergeyv1534 3 роки тому +2

    Спасибо за лекцию - очень интересно, информативно и полезно!

  • @user-ef3bt9ni4o
    @user-ef3bt9ni4o 3 роки тому +1

    Тимофей Федорович, респект и уважуха, очень вдохновляете, я подсел на ваши лекции)

  • @user-pe1um3ml3n
    @user-pe1um3ml3n 3 роки тому +2

    Супер! очень полезно. Скорее бы след. лекция.

  • @valitovgaziz
    @valitovgaziz 3 роки тому +7

    Большое человеческое спасибо.

  • @erxewq2844
    @erxewq2844 3 роки тому +3

    Добрый день. Благодарю вас за прекрасные лекции. Для комфортного просмотра отключайте, пожалуйста, уведомления - они сильно отвлекают)

  • @mylittlebigcom
    @mylittlebigcom 3 роки тому

    1:27:57 - Новая тема курса от Тимофея Федоровича))
    Спасибо за то, что делаете!!!

  • @usernoname-wv6of
    @usernoname-wv6of Рік тому

    Это лучшее объяснение фунтамента параллелизма, что я видел. must-see

  • @headcliff07
    @headcliff07 3 роки тому +3

    Respect. Timofey Xiryanov You are the best. Thanks!!!

  • @Rez0lventa
    @Rez0lventa Рік тому

    Прекрасный рассказчик и отличный материал!

  • @senegalgreen6869
    @senegalgreen6869 2 роки тому +1

    преподаватель от Бога! Спасибо!

  • @alinakasper392
    @alinakasper392 3 роки тому +4

    Лучший преподаватель в мире.

  • @ealbitg1043
    @ealbitg1043 3 роки тому +2

    Как всегда лайк. Не хватает примеров, которые вы на ходу демонстрировали на прошлых видео. Например, как с черепахой и объяснением , что происходит в конкретном месте.
    Этого очень не хватает , когда высоздаете классы наследующие из базовых классов

  • @mcusfuns6907
    @mcusfuns6907 3 роки тому

    Рекомендую курс и преподаватель отличный. Коммент вместо второго лайка.

  • @user-sd3jy8qf3q
    @user-sd3jy8qf3q 3 роки тому +4

    Вспомнил момент восхищения от новости про выход Pentium D - ДВУХЯДЕРНЫЙ!!!! ЭТО КАК ДВА ПРОЦЕССОРА НО В ОДНОМ!!!
    Статью прочитал тогда в игромании или стране игр, точно не помню журнал.

  • @hardcoreentertainments5496
    @hardcoreentertainments5496 3 роки тому +3

    ++++++++++ Хороший Учитель! Респект однозначно!

  • @linkina1585
    @linkina1585 3 роки тому +4

    Спасибо Вам большое. Жаль у нас школе так не умеют преподавать материал

  • @grigoralex406
    @grigoralex406 6 місяців тому

    лекция про потоки весьма своевременна. читаю лутца и прохожу как раз потоки

  • @serg3205
    @serg3205 3 роки тому +9

    Люблю питончик!!!

  • @palyashuk42
    @palyashuk42 Рік тому

    Топовый лектор!

  • @user-hu7tu5qe7b
    @user-hu7tu5qe7b 3 роки тому

    Спасибо Вам

  • @AntonyKondr
    @AntonyKondr 7 місяців тому

    Гонка в повышении термопакета улыбнула :)

  • @exploringtheworld8780
    @exploringtheworld8780 3 роки тому +1

    Спасибо!

  • @Vologdos
    @Vologdos 3 роки тому +7

    Вижу, что Тимофей под конец лекции устал. Красавчик

  • @yuradubinin9778
    @yuradubinin9778 3 роки тому +2

    Барабанщику не сложно, он вёслами не крутит 😂
    Нет, а если серьезно , то спасибо вам большое))
    Очень интересно слушать

    • @Ma_X64
      @Ma_X64 3 роки тому

      Хорошему не сложно))) А плохому -- когда как)) Особенно, если после концерта бьют в гримёрке ;D

  • @andriiroiko8608
    @andriiroiko8608 3 роки тому +1

    Thanks :)

  • @user-zi7tu3xy8y
    @user-zi7tu3xy8y 3 роки тому +2

    буквально недавно задавался этим вопросом многопоточности, пришел к выводу, что не совсем блокировка нужна а реорганизация процесса, Первое это присвоение статусов для объектов с которыми работает поток(процесс) на такие как: свободен, занять процессом, обработан процессом(завершен) и еще возможно какие то дополнительные статусы. Что бы не возникало ситуации доступа нескольких процессов одновременно к одному свободному объекту и путаницы какой процесс раньше его возьмет(как в вашем примере с туалетом), какой позже и т д, организуется очередь. Сначала любой свободный или освободившийся поток попадает в очередь и ждет, пока предыдущий поток не станет занят. схема Fifo lifo. Возможно оно так организовано и я не владею всей полной информации о распределении потоков, но вижу правильной работу распределения такой.

  • @KirillKlenov
    @KirillKlenov 3 роки тому

    Вводная общая часть прекрасна, практическая часть на питоне несколько сумбурна и непроработана.

  • @user-vu8pl8zl7h
    @user-vu8pl8zl7h 3 роки тому +2

    Мне понадобилось какое-то время чтобы осознать, что "общая память" не только общая в плане физического расположения относительно акторов, но и всмысле общего доступа к одним переменным (или адресам).

  • @volodymyromelenchuk7528
    @volodymyromelenchuk7528 3 роки тому +2

    Огромное спасибо за интересные и полезные лекции! Жаль правда, что ссылка на гитхаб с файлами в описании не активная((

    • @volodymyromelenchuk7528
      @volodymyromelenchuk7528 3 роки тому +1

      @@Throttle0496 оо, спасибо! твоя ссылка работает

  • @theatreoftragedy7524
    @theatreoftragedy7524 3 роки тому +2

    Тимофей, подскажите, пожалуйста, в МФТИ есть программы обучения для тестировщиков ?

  • @sekejodemini1
    @sekejodemini1 3 роки тому +8

    Круто! А почему следующая лекция скрыта?

    • @tkhirianov
      @tkhirianov  3 роки тому +7

      Поправил. Проверяйте.

    • @sekejodemini1
      @sekejodemini1 3 роки тому +5

      Тимофей Фёдорович, вы лучший, спасибо!

  • @non5309
    @non5309 6 місяців тому +1

    кто тут еще с курса на степике по многопоточному программированию на python?

  • @alexeyshulgin4556
    @alexeyshulgin4556 3 роки тому +1

    Тимофей Федорович, спасибо за простое разъяснение. Не могли бы Вы кратко коснуться особенностей распараллеливания на CUDA и посоветовать какой-либо популярно-практический материал по этой теме. Спасибо.

    • @tkhirianov
      @tkhirianov  3 роки тому +2

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

    • @alexeyshulgin4556
      @alexeyshulgin4556 3 роки тому +2

      @@tkhirianov Огромное спасибо! С нетерпением буду ждать.

  • @LSE13
    @LSE13 3 роки тому +2

    Магнитов, кажется, все больше и больше. К концу курса они заполнят всю доску?:)

  • @professorwoland9554
    @professorwoland9554 Рік тому

    Тайм-код 8:20
    Правильнее доля вычисляется так: dt/(dt+∆t)

  • @Ma_X64
    @Ma_X64 3 роки тому +1

    С тем, что в микроконтроллере нет операционной системы, категорически не согласен. Каких только ОС нет под них. Ну, самая популярная, конечно FreeRTOS. Но в последнее время появились камни достаточно мощные (даже с несколькими ядрами), чтобы тянуть даже линуксы -- урезанные, конечно, вроде бизибокса.
    Более того! Параллельная многозадачность в МК существует всегда, вне зависимости от того, используем мы ОС или нет. Там же есть прерывания от периферии, которые могут вклиниваться в основной процесс в случайные моменты. А, например, МК Propeller вообще восьмиядерный, и там вообще всё выполняется истинно параллельно.

  • @alexeyzabashta
    @alexeyzabashta 3 роки тому +1

    30:05 процессор к радиатору "прикипел"

  • @alexeivinnikov9614
    @alexeivinnikov9614 3 роки тому +3

    Добрый день!
    Не по теме видео вопрос, но всё же: сейчас приняли (или принимают) закон о просветительской деятельности. Как сильно это Вас коснется? Стоит ли уже запасливо копировать Ваши видео себе на винт (а то я недавно начал Вас смотреть и изучать Python) или рано мне панику разводить?

    • @Ma_X64
      @Ma_X64 3 роки тому

      Здесь точно проблем не будет, т.к. эти лекции изначально для конкретных учебных заведений. Там в законе это отдельно прописано.

  • @morrigan_ghost
    @morrigan_ghost 3 роки тому

    не знаю что я здесь делаю, но очень интересно

  • @jamjam3337
    @jamjam3337 6 місяців тому

    👏👍

  • @vadimushkevich1283
    @vadimushkevich1283 3 роки тому

    Interleaving. Каждые 50 минут звенит звонок начала урока. Ученик (процессор) открывает портфель, достаёт соответствующую очередному предмету тетрадку, может быть ещё что-то (линейку, циркуль) и приступает к этому уроку. И выполняет этот урок до звонка окончания урока. Затем он убирает эту тетрадь и другое в портфель.По очередному звонку начала очередного урока ученик достаёт тетрадь другого предмета согласно расписанию и т.д

  • @rhurus
    @rhurus 3 роки тому +9

    1:42:14 функция is_prime не определена

    • @user-gq6dv9pp5h
      @user-gq6dv9pp5h 3 роки тому

      Видимо какой то блок выше не отработал или так и было задумано.

  • @radifkurbanov3026
    @radifkurbanov3026 2 роки тому

    1:51:30 - Сразу после запуска процесса p, у вас parent_conn начинает принимать соединения и в этот же момент другой процесс p отправляет туда массив. Так что всё логично. Это же два разных процесса

    • @guiterenzog2723
      @guiterenzog2723 Рік тому

      Именно поэтому и должен быть вывод другой)

  • @alexanderkolesnik9357
    @alexanderkolesnik9357 3 роки тому +3

    30:07 Это как так проц к радиатору прилепился?))) это спец экспонат, или он там вообще в сокете без держателя?)

    • @Ginto_O
      @Ginto_O 3 роки тому +1

      Ну, вообще сокет можно разобрать, для некоторых китайских процессоров надо так делать

  • @Ma_X64
    @Ma_X64 3 роки тому

    Если кто помнит, не так давно были нередки вредоносы под винду, которые, когда запускались, жрали 100% процессора. Многие думали, что они какие-то мегавычисления там выполняют на проце, а на самом деле, там крутился пустой цикл в потоке, который ожидал подключения по сети. Видимо, оптимизация переключения процессов как-то так устроена, что если никакой серьёзной работы процесс не выполняет, то, типа, подождём -- недолго же, а он всё продолжает и продолжает скакать с команды на команду. Т.е. эти самые вредоносы писались какими-то очень криворукими людьми, которые либо не замечали такого палевного бага, либо не знали, как починить. А там всего-то и нужно, что чем-нибудь занять проц или уйти в сон на миллисекунду, напрмер, проверив отсутствие соединения.

  • @ilyaclutcher
    @ilyaclutcher 2 роки тому

    В начале видео всё очень было похоже на асинхронность в Python)

  • @stavros1983
    @stavros1983 Рік тому

    День добрый. А остальные 10 занятий будут выставляться? Как их можно увидеть?

  • @dmitriyvaulin
    @dmitriyvaulin 2 роки тому

    Прерывание выставляет флаг в стеке процессора, и планировщик - watchdog при проверке пробуждает процессор для выполнения hook-а - входа полученных данных от прерывания в ожидающую программу.

  • @psevdonim3972
    @psevdonim3972 3 роки тому +5

    отличный ролик, но хотелось бы больше материалов по c++

    • @alexp2179
      @alexp2179 3 роки тому

      кому чего, я вот конкретно этот урок ждал)

  • @lonelydance
    @lonelydance 3 роки тому +2

    pymentor

  • @user-oj7lo6mv7h
    @user-oj7lo6mv7h 3 роки тому +2

    39:59 bus?

  • @ninaosokina3551
    @ninaosokina3551 Рік тому

    Процессоры тоже загружены на 146% 😅😂🤣

  • @idw1n235
    @idw1n235 3 роки тому +2

    Здравствуйте Тимофей. Студенты в МФТИ пишут курсовую, дипломную(по программированию), попадались или рассматривает ли МФТИ работы студентов с коммерческой точки зрения? Дипломная работа, проект который соберут трое студентов, может содержать интересные решения в различных сферах... Тему Искусственный интеллект привлекает Наше правительство в МФТИ?

    • @idw1n235
      @idw1n235 3 роки тому

      Может ли привлечь?

  • @ivanihnatsenkau8984
    @ivanihnatsenkau8984 Місяць тому

    Когда кто-то пытается объяснить как работать с параллельным программированием 1:47:28

  • @avazart614
    @avazart614 2 роки тому +1

    В питоне нет многопоточности - есть только полупоточность.
    (Шутка намекающая на проблему с GIL)

  • @artemmarzipan5452
    @artemmarzipan5452 7 місяців тому

    И давно киркоров преподаёт?

  • @alexanderzhilcov5392
    @alexanderzhilcov5392 3 роки тому

    виндовозеры хехе

  • @user-zg2bx5cb3d
    @user-zg2bx5cb3d 3 роки тому +8

    ТФ, извините, конечно, но иногда видно непонимание каких-то базовых моментов с вашей стороны.
    Не стоит смешивать асинхронное выполнение и выполнение на потоках, не рассказав про EventLoop, про разницу I/O-bound и CPU-bound задач. Разумеется, потоки и асинхронность предполагают выигрыш в случае I/O-bound задач, когда процессы решают CPU-bound, но реализованы они по-разному со всеми вытекающими.
    В случае асинхронного выполнения, в частности, data race condition быть не может, поскольку это не параллельное выполнение, а конкурентное (concurrency), т.е. всё выполняется в одном потоке внутри одного процесса. Тем не менее в asyncio есть Lock, Semaphore, Condition, BoundedSemaphore, Event, Queue и ряд других примитивов синхронизации, но их цель несколько другая.
    Также рекомендую ознакомиться с понятием воркера, которое есть как на потоках, процессах, так и в асинхронности. Этот способ существенно облегчает и делает более безопасным выполнение корутин (это про асинхронность).
    Рекомендую: «Архитектура компьютера» Танебаума, «Async Techniques and Examples in Python» Майкла Кеннеди (см. nnmclub, ну или я могу скинуть вам эти материалы), видео с канала Corey Schafer, лекции Юрия Селиванова (Python core developer, asyncio maintainer), Андрея Светлова (aiohttp maintainer), материалы по асинхронности в других языках, где она реализована лучше, нежели в Python: go с его goroutine и каналами, например, или js с его Promise'ами.

    • @user-zg2bx5cb3d
      @user-zg2bx5cb3d 3 роки тому

      И, возможно, Алексей Голобурдин с канала Диджитализируй в скором времени начнёт свой курс «WEB разработка на Python», где расскажет в том числе про асинхронный Python.

    • @bluxer4225
      @bluxer4225 3 роки тому

      читать тут все умеют.

    • @georgiipetrovich5407
      @georgiipetrovich5407 3 роки тому

      Race condition безусловно может возникнуть и при одном процессоре, и нескольких потоках, то есть при concurrent выполнении:
      ; 1 поток
      mov addr, %rax
      ; Произошло переключение потоков
      ; 2 поток
      mov addr, %rax
      inc %rax
      mov %rax, addr
      ; Снова переключение потоков
      ;1 поток
      inc %rax
      mov %rax, addr
      Такая ситуация вполне может случиться при выполнении "конкурентно" чего то в духе
      x += 1
      А когда поток один - это вообще не concurrency

    • @user-zg2bx5cb3d
      @user-zg2bx5cb3d 3 роки тому

      @@georgiipetrovich5407 нет, ознакомьтесь с темой

    • @user-zg2bx5cb3d
      @user-zg2bx5cb3d 3 роки тому

      @@bluxer4225 вы этим сообщением доказали, что умеете писать? Или зачем эта никому не нужная, пустая писня от профана?

  • @user-gc5xj6rk9l
    @user-gc5xj6rk9l 3 роки тому +2

    Что такое параллельное программирование? АЛУ не может работать параллельно в силу своей физики.
    Тогда параллельное программирование это исполнение одной программы несколькими процессорами одновременно. Выигрыш в скорости. На такое параллельное программирование я согласен.
    То что он описывает это не параллельное а периодическое исполнение разных программ. Время исполнения команд тоже самое. Но теряется время на переходы.
    В чём смысл?

    • @user-fe5oj9ex9i
      @user-fe5oj9ex9i Рік тому

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

  • @user-nh7ic5ie3q
    @user-nh7ic5ie3q 9 місяців тому

    Щщ

  • @BogdanDotPy
    @BogdanDotPy Рік тому

    Я вот считаю, что вы тратите моё время пока пишете на доске, монтажем можно было воспользоваться

  • @TheUncleCarlo
    @TheUncleCarlo 3 місяці тому

    Слабая лекция, важные практические моменты не рассмотрены вообще

  • @user-ec8cd5xt1v
    @user-ec8cd5xt1v 3 роки тому

    гля. киркоров уже питон преподает)))

  • @mr.senmax6185
    @mr.senmax6185 Рік тому +1

    Знаю я одного "раба на галерах" - войну устроил.

  • @patrickspilmann5008
    @patrickspilmann5008 3 роки тому +1

    Вы - крутой! Гульфик Фюрер - сидеть! Не надо переплетать себя с политикой, Вы же мастер своего дела, а не политик...

    • @whitebear1903
      @whitebear1903 3 роки тому +3

      *Ты же знаешь сколько преподаватели получают, ты что голодного хочешь убедить, что он сытый? Имеет полное право и не ссыт.*

  • @MalvinasArgentinas1982
    @MalvinasArgentinas1982 11 місяців тому

    No entiendo un carajo