Тёмный

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

Тимофей Хирьянов
Подписаться 352 тыс.
Просмотров 66 тыс.
50% 1

Курс из 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...

Опубликовано:

 

19 фев 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 123   
@iritaka
@iritaka 3 года назад
Тайм-коды: многопоточность, асинхронность, 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
@user-hu7tu5qe7b
@user-hu7tu5qe7b 3 года назад
Спасибо Вам
@user-nh7ic5ie3q
@user-nh7ic5ie3q 9 месяцев назад
​@@user-hu7tu5qe7bт
@user-nh7ic5ie3q
@user-nh7ic5ie3q 9 месяцев назад
тттТ
@user-nh7ic5ie3q
@user-nh7ic5ie3q 9 месяцев назад
Л
@mmm43kir
@mmm43kir 3 года назад
Пишет "параллельное программирование" не отвлекаясь на свои слова. Это реальный пример такого программирования.
@valentin3241
@valentin3241 Год назад
Гениальный преподаватель. С горящими глазами, юмором, уместными метафорами! Нет слов, браво!
@fanlug
@fanlug 3 года назад
10 выпавших блоков питания из 10
@user-ih4mc1je1o
@user-ih4mc1je1o 3 года назад
Тимофей Федорович, большое спасибо за ваши лекции, очень интересно и очень полезно
@dmitriyvaulin
@dmitriyvaulin 2 года назад
но не особо точно :)
@dimaalexeenko3669
@dimaalexeenko3669 3 года назад
Крутой канал, мужику респектище, знает своё дело
@skrskrbam
@skrskrbam 3 года назад
как быстро время летит, попал на ваше видео 2017 года, а вы все также молоды👍🏿
@olegger7436
@olegger7436 3 года назад
Просто замечательная подача информации. Ждем продолжения, тема очень интересная
@MrMegaNatural
@MrMegaNatural 3 года назад
Спасибо Тимофей, всегда с большим удоволствием смoтрю ваши лекции!
@pomapoma6643
@pomapoma6643 3 года назад
Ваши лекции прекрасны!
@user-yq1yd7nx8g
@user-yq1yd7nx8g 3 года назад
Шикарное объяснение, спасибо вам
@denisbaranoff
@denisbaranoff 3 года назад
Как всегда - превосходен 👏 Особенно, хотелось отметить особый талант лектора
@maxbespontoff2771
@maxbespontoff2771 3 года назад
Великолепная подача информации. Мое вам почтение.
@act0r399
@act0r399 3 года назад
Вот это я понимаю любовь к своему делу, прекасно)) Спасибо Вам Тимофей))
@erxewq2844
@erxewq2844 3 года назад
Добрый день. Благодарю вас за прекрасные лекции. Для комфортного просмотра отключайте, пожалуйста, уведомления - они сильно отвлекают)
@alinakasper392
@alinakasper392 3 года назад
Лучший преподаватель в мире.
@user-pe1um3ml3n
@user-pe1um3ml3n 3 года назад
Супер! очень полезно. Скорее бы след. лекция.
@sergeyv1534
@sergeyv1534 3 года назад
Спасибо за лекцию - очень интересно, информативно и полезно!
@headcliff07
@headcliff07 3 года назад
Respect. Timofey Xiryanov You are the best. Thanks!!!
@user-ef3bt9ni4o
@user-ef3bt9ni4o 3 года назад
Тимофей Федорович, респект и уважуха, очень вдохновляете, я подсел на ваши лекции)
@valitovgaziz
@valitovgaziz 3 года назад
Большое человеческое спасибо.
@usernoname-wv6of
@usernoname-wv6of Год назад
Это лучшее объяснение фунтамента параллелизма, что я видел. must-see
@mylittlebigcom
@mylittlebigcom 3 года назад
1:27:57 - Новая тема курса от Тимофея Федоровича)) Спасибо за то, что делаете!!!
@user-sd3jy8qf3q
@user-sd3jy8qf3q 3 года назад
Вспомнил момент восхищения от новости про выход Pentium D - ДВУХЯДЕРНЫЙ!!!! ЭТО КАК ДВА ПРОЦЕССОРА НО В ОДНОМ!!! Статью прочитал тогда в игромании или стране игр, точно не помню журнал.
@senegalgreen6869
@senegalgreen6869 2 года назад
преподаватель от Бога! Спасибо!
@Rez0lventa
@Rez0lventa Год назад
Прекрасный рассказчик и отличный материал!
@grigoralex406
@grigoralex406 6 месяцев назад
лекция про потоки весьма своевременна. читаю лутца и прохожу как раз потоки
@Vologdos
@Vologdos 3 года назад
Вижу, что Тимофей под конец лекции устал. Красавчик
@AntonyKondr
@AntonyKondr 7 месяцев назад
Гонка в повышении термопакета улыбнула :)
@ealbitg1043
@ealbitg1043 3 года назад
Как всегда лайк. Не хватает примеров, которые вы на ходу демонстрировали на прошлых видео. Например, как с черепахой и объяснением , что происходит в конкретном месте. Этого очень не хватает , когда высоздаете классы наследующие из базовых классов
@linkina1585
@linkina1585 3 года назад
Спасибо Вам большое. Жаль у нас школе так не умеют преподавать материал
@hardcoreentertainments5496
@hardcoreentertainments5496 3 года назад
++++++++++ Хороший Учитель! Респект однозначно!
@mcusfuns6907
@mcusfuns6907 3 года назад
Рекомендую курс и преподаватель отличный. Коммент вместо второго лайка.
@serg3205
@serg3205 3 года назад
Люблю питончик!!!
@theatreoftragedy7524
@theatreoftragedy7524 3 года назад
Тимофей, подскажите, пожалуйста, в МФТИ есть программы обучения для тестировщиков ?
@exploringtheworld8780
@exploringtheworld8780 3 года назад
Спасибо!
@yuradubinin9778
@yuradubinin9778 3 года назад
Барабанщику не сложно, он вёслами не крутит 😂 Нет, а если серьезно , то спасибо вам большое)) Очень интересно слушать
@Ma_X64
@Ma_X64 3 года назад
Хорошему не сложно))) А плохому -- когда как)) Особенно, если после концерта бьют в гримёрке ;D
@user-hu7tu5qe7b
@user-hu7tu5qe7b 3 года назад
Спасибо Вам
@sekejodemini1
@sekejodemini1 3 года назад
Круто! А почему следующая лекция скрыта?
@tkhirianov
@tkhirianov 3 года назад
Поправил. Проверяйте.
@sekejodemini1
@sekejodemini1 3 года назад
Тимофей Фёдорович, вы лучший, спасибо!
@palyashuk42
@palyashuk42 Год назад
Топовый лектор!
@user-zi7tu3xy8y
@user-zi7tu3xy8y 3 года назад
буквально недавно задавался этим вопросом многопоточности, пришел к выводу, что не совсем блокировка нужна а реорганизация процесса, Первое это присвоение статусов для объектов с которыми работает поток(процесс) на такие как: свободен, занять процессом, обработан процессом(завершен) и еще возможно какие то дополнительные статусы. Что бы не возникало ситуации доступа нескольких процессов одновременно к одному свободному объекту и путаницы какой процесс раньше его возьмет(как в вашем примере с туалетом), какой позже и т д, организуется очередь. Сначала любой свободный или освободившийся поток попадает в очередь и ждет, пока предыдущий поток не станет занят. схема Fifo lifo. Возможно оно так организовано и я не владею всей полной информации о распределении потоков, но вижу правильной работу распределения такой.
@user-vu8pl8zl7h
@user-vu8pl8zl7h 3 года назад
Мне понадобилось какое-то время чтобы осознать, что "общая память" не только общая в плане физического расположения относительно акторов, но и всмысле общего доступа к одним переменным (или адресам).
@volodymyromelenchuk7528
@volodymyromelenchuk7528 3 года назад
Огромное спасибо за интересные и полезные лекции! Жаль правда, что ссылка на гитхаб с файлами в описании не активная((
@volodymyromelenchuk7528
@volodymyromelenchuk7528 3 года назад
@@Throttle0496 оо, спасибо! твоя ссылка работает
@andriiroiko8608
@andriiroiko8608 3 года назад
Thanks :)
@rhurus
@rhurus 3 года назад
1:42:14 функция is_prime не определена
@user-gq6dv9pp5h
@user-gq6dv9pp5h 3 года назад
Видимо какой то блок выше не отработал или так и было задумано.
@LSE13
@LSE13 3 года назад
Магнитов, кажется, все больше и больше. К концу курса они заполнят всю доску?:)
@non5309
@non5309 6 месяцев назад
кто тут еще с курса на степике по многопоточному программированию на python?
@alexeivinnikov9614
@alexeivinnikov9614 3 года назад
Добрый день! Не по теме видео вопрос, но всё же: сейчас приняли (или принимают) закон о просветительской деятельности. Как сильно это Вас коснется? Стоит ли уже запасливо копировать Ваши видео себе на винт (а то я недавно начал Вас смотреть и изучать Python) или рано мне панику разводить?
@Ma_X64
@Ma_X64 3 года назад
Здесь точно проблем не будет, т.к. эти лекции изначально для конкретных учебных заведений. Там в законе это отдельно прописано.
@KirillKlenov
@KirillKlenov 3 года назад
Вводная общая часть прекрасна, практическая часть на питоне несколько сумбурна и непроработана.
@alexanderkolesnik9357
@alexanderkolesnik9357 3 года назад
30:07 Это как так проц к радиатору прилепился?))) это спец экспонат, или он там вообще в сокете без держателя?)
@Ginto_O
@Ginto_O 3 года назад
Ну, вообще сокет можно разобрать, для некоторых китайских процессоров надо так делать
@alexeyshulgin4556
@alexeyshulgin4556 3 года назад
Тимофей Федорович, спасибо за простое разъяснение. Не могли бы Вы кратко коснуться особенностей распараллеливания на CUDA и посоветовать какой-либо популярно-практический материал по этой теме. Спасибо.
@tkhirianov
@tkhirianov 3 года назад
Алексей, к сожалению, не работал пока на видеокартах. Как только поработаю в этой теме и разберусь, постараюсь сделать курс или хотя бы пару лекций.
@alexeyshulgin4556
@alexeyshulgin4556 3 года назад
@@tkhirianov Огромное спасибо! С нетерпением буду ждать.
@Ma_X64
@Ma_X64 3 года назад
С тем, что в микроконтроллере нет операционной системы, категорически не согласен. Каких только ОС нет под них. Ну, самая популярная, конечно FreeRTOS. Но в последнее время появились камни достаточно мощные (даже с несколькими ядрами), чтобы тянуть даже линуксы -- урезанные, конечно, вроде бизибокса. Более того! Параллельная многозадачность в МК существует всегда, вне зависимости от того, используем мы ОС или нет. Там же есть прерывания от периферии, которые могут вклиниваться в основной процесс в случайные моменты. А, например, МК Propeller вообще восьмиядерный, и там вообще всё выполняется истинно параллельно.
@vadimushkevich1283
@vadimushkevich1283 3 года назад
Interleaving. Каждые 50 минут звенит звонок начала урока. Ученик (процессор) открывает портфель, достаёт соответствующую очередному предмету тетрадку, может быть ещё что-то (линейку, циркуль) и приступает к этому уроку. И выполняет этот урок до звонка окончания урока. Затем он убирает эту тетрадь и другое в портфель.По очередному звонку начала очередного урока ученик достаёт тетрадь другого предмета согласно расписанию и т.д
@alexeyzabashta
@alexeyzabashta 3 года назад
30:05 процессор к радиатору "прикипел"
@professorwoland9554
@professorwoland9554 Год назад
Тайм-код 8:20 Правильнее доля вычисляется так: dt/(dt+∆t)
@stavros1983
@stavros1983 Год назад
День добрый. А остальные 10 занятий будут выставляться? Как их можно увидеть?
@radifkurbanov3026
@radifkurbanov3026 2 года назад
1:51:30 - Сразу после запуска процесса p, у вас parent_conn начинает принимать соединения и в этот же момент другой процесс p отправляет туда массив. Так что всё логично. Это же два разных процесса
@guiterenzog2723
@guiterenzog2723 Год назад
Именно поэтому и должен быть вывод другой)
@jamjam3337
@jamjam3337 6 месяцев назад
👏👍
@Ma_X64
@Ma_X64 3 года назад
Если кто помнит, не так давно были нередки вредоносы под винду, которые, когда запускались, жрали 100% процессора. Многие думали, что они какие-то мегавычисления там выполняют на проце, а на самом деле, там крутился пустой цикл в потоке, который ожидал подключения по сети. Видимо, оптимизация переключения процессов как-то так устроена, что если никакой серьёзной работы процесс не выполняет, то, типа, подождём -- недолго же, а он всё продолжает и продолжает скакать с команды на команду. Т.е. эти самые вредоносы писались какими-то очень криворукими людьми, которые либо не замечали такого палевного бага, либо не знали, как починить. А там всего-то и нужно, что чем-нибудь занять проц или уйти в сон на миллисекунду, напрмер, проверив отсутствие соединения.
@morrigan_ghost
@morrigan_ghost 3 года назад
не знаю что я здесь делаю, но очень интересно
@ilyaclutcher
@ilyaclutcher 2 года назад
В начале видео всё очень было похоже на асинхронность в Python)
@dmitriyvaulin
@dmitriyvaulin 2 года назад
Прерывание выставляет флаг в стеке процессора, и планировщик - watchdog при проверке пробуждает процессор для выполнения hook-а - входа полученных данных от прерывания в ожидающую программу.
@user-oj7lo6mv7h
@user-oj7lo6mv7h 3 года назад
39:59 bus?
@psevdonim3972
@psevdonim3972 3 года назад
отличный ролик, но хотелось бы больше материалов по c++
@alexp2179
@alexp2179 3 года назад
кому чего, я вот конкретно этот урок ждал)
@idw1n235
@idw1n235 3 года назад
Здравствуйте Тимофей. Студенты в МФТИ пишут курсовую, дипломную(по программированию), попадались или рассматривает ли МФТИ работы студентов с коммерческой точки зрения? Дипломная работа, проект который соберут трое студентов, может содержать интересные решения в различных сферах... Тему Искусственный интеллект привлекает Наше правительство в МФТИ?
@idw1n235
@idw1n235 3 года назад
Может ли привлечь?
@ninaosokina3551
@ninaosokina3551 Год назад
Процессоры тоже загружены на 146% 😅😂🤣
@lonelydance
@lonelydance 3 года назад
pymentor
@ivanihnatsenkau8984
@ivanihnatsenkau8984 28 дней назад
Когда кто-то пытается объяснить как работать с параллельным программированием 1:47:28
@avazart614
@avazart614 2 года назад
В питоне нет многопоточности - есть только полупоточность. (Шутка намекающая на проблему с GIL)
@artemmarzipan5452
@artemmarzipan5452 7 месяцев назад
И давно киркоров преподаёт?
@user-zg2bx5cb3d
@user-zg2bx5cb3d 3 года назад
ТФ, извините, конечно, но иногда видно непонимание каких-то базовых моментов с вашей стороны. Не стоит смешивать асинхронное выполнение и выполнение на потоках, не рассказав про 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 года назад
Что такое параллельное программирование? АЛУ не может работать параллельно в силу своей физики. Тогда параллельное программирование это исполнение одной программы несколькими процессорами одновременно. Выигрыш в скорости. На такое параллельное программирование я согласен. То что он описывает это не параллельное а периодическое исполнение разных программ. Время исполнения команд тоже самое. Но теряется время на переходы. В чём смысл?
@user-fe5oj9ex9i
@user-fe5oj9ex9i Год назад
допустим нужно отрисовывать графику игры и одновременно организовать управления через клавиатуру , тут без таких пирирываний никак
@alexanderzhilcov5392
@alexanderzhilcov5392 3 года назад
виндовозеры хехе
@BogdanDotPy
@BogdanDotPy Год назад
Я вот считаю, что вы тратите моё время пока пишете на доске, монтажем можно было воспользоваться
@user-nh7ic5ie3q
@user-nh7ic5ie3q 9 месяцев назад
Щщ
@TheUncleCarlo
@TheUncleCarlo 3 месяца назад
Слабая лекция, важные практические моменты не рассмотрены вообще
@mr.senmax6185
@mr.senmax6185 Год назад
Знаю я одного "раба на галерах" - войну устроил.
@user-ec8cd5xt1v
@user-ec8cd5xt1v 3 года назад
гля. киркоров уже питон преподает)))
@patrickspilmann5008
@patrickspilmann5008 3 года назад
Вы - крутой! Гульфик Фюрер - сидеть! Не надо переплетать себя с политикой, Вы же мастер своего дела, а не политик...
@whitebear1903
@whitebear1903 3 года назад
*Ты же знаешь сколько преподаватели получают, ты что голодного хочешь убедить, что он сытый? Имеет полное право и не ссыт.*
@MalvinasArgentinas1982
@MalvinasArgentinas1982 10 месяцев назад
No entiendo un carajo
Далее
СЫВОРОТКА С ВБ
00:39
Просмотров 284 тыс.
Рекурсия. Репка и матрёшка
18:37
Просмотров 116 тыс.
Алгоритмы на Python 3. Лекция №4
1:14:14