Многопоточность и GIL
Модули threading, queue и concurrent.futures. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio. Модуль multiprocessing.
Лекция №13 в курсе "Python" (осень 2015).
Преподаватель курса: Сергей Лебедев
Страница лекции на сайте CS центра: goo.gl/fvCCpJ
Пікірлер: 29
Содержательный курс. Спасибо, Сергей!
Лучший курс по python, лучший лектор
Спасибо за курс!
-- Вот такая вот история! Отличный курс и лектор. Пс. Чиселка!
Очень содержательный курс! Спасибо большое!
Один из немногих годных курсов по python, действительно полезно
@nicholasspezza9449
Жыл бұрын
соглашусь с вами из начала 2023
Спасибо, воистину годный контент!
45:32 - Модуль futures 55:15 - Параллелизм и конкурентность 1:14:15 - Модуль multiprocessing
@nicholasspezza9449
Жыл бұрын
глупый лакей
Огромное спасибо!
Присоединяюсь, курс понравился. Перестал бояться метаклассов :)
Отличная лекция
16:25 - join называется, потому что идёт присоединение потока, у которого вызывали метод join, к вызывающему. А присоединиться он сможет, только когда завершит свою работу. Поэтому и join() ждёт, пока поток выполнится и после этого присоединит этот поток к вызывающему потоку.
Сергей, спасибо за прекрасный курс лекций! Возможно, на слайде 32 есть небольшая неточность. Методу delayed необходимо передать еще один параметр: math.cos, но только если cos в intergrate "не зашит".
@slebedev
7 жыл бұрын
Да, действительно. Спасибо!
Conditional locks. важно уточнить, что поток customer должен быть запущен после producer иначе customer захватит лок и будет ждать элементы бесконечно, а producer не сможет их создать потому, что лок захвачен. А также, вот этот второй while приведет к тому, что мы попытаемся wait на отпущенном локе (producer отпустил) что вызовет исключение. Потому он не нужен.
@user-nb5ih1dm7d
3 жыл бұрын
Кажется, это не так. Даже если запустить consumer раньше, и он захватит блокировку, wait отпустит ее, пока не получит notify от другого треда (ну и release).
26:47 - 27:17 - вообще-то, RLock имеет свой счётчик уровня рекурсии. И сделать релиз блокировки нужно ровно столько же раз, сколько мы сделали блокировок. Каждый вызов acquire() увеличивает этот счётчик на единицу, а каждый вызов release() уменьшает на единицу. Разблокировка произойдёт только тогда, когда этот счётчик будет равен нулю. Это в документации написано.
41:40 - зачем вызывать в потоке функцию follow рекурсивно? Ведь можно было бы сделать внешим циклом, что позволило бы избежать переполнения стека.
Насколько я знаю, pipe -- это вовсе не "свой путь python", а инструмент IPC ОС. Может быть, питон его и использует под капотом или там реально какая-то своя реализация?
и gil запрещëнная в российской федерации организация
Вспомнился анекдот про процесс: Гениколог: Раз аборт, два оборт - завтра еду на курорт Судья: Раз процесс, два процесс - завтра будет мерседес Учитель: Раз тетрадь, два тетрадь - есть чем ж.пу вытирать
@bambimbambas
3 жыл бұрын
Ого, шутка, ничего себе. Сам додумался, или чёртов клуб шизоидов подсказал ?
@structureandconquer
3 жыл бұрын
@@bambimbambas берите и делитесь дорогой Назар. Всех вам благ и компилируемого кода. П.с. Застрелитесь избавьте нас от ваших компетентных мнений
@nicholasspezza9449
Жыл бұрын
@@bambimbambas отличная шутка, а вы просто глупое быдло, строящее из себя не пойми что.
Объясните колхознику, что криво-косо произнесённые английские слова в русской речи отвлекают от сути как если бы он рыгал каждую минуту
Отличная лекция