Основы многопоточности в Python

preview_player
Показать описание
Продолжая тему конкурентности и параллелизма посмотрим на старые добрые потоки.

multithreading - многопоточность, подходит для IO-bound задач, использует ОС, страдает от GIL (важно помнить)

Полезно для ускорения выполнения задач или для того, чтобы текущий поток занялся другой задачей
Любая программа это минимум один процесс и один поток
Полезно использовать daemon=True, очереди, pool exeсutor, НО в любом случае все зависит от программиста!

Плюсы:
+ просто(сравнительно)
+ быстро
+ не умирает из-за одного(!)
Минусы:
- потребление ресурсов (ОС)
- неуправляемость (старт, приостановка, переключение)
- проблемы потоков (гонка, блокировки)

Читать:

Фаулер М. "Asyncio и конкурентное программирование на Python"

Присоединяйтесь к помощи каналу, будет интересно)
✔️Юмани 410011506612886

Будь первым везде и всегда, включай уведомления о новых выпусках 🔔

Смотри там где удобно🤩

#Python #PythonRussian #PyCharm
Рекомендации по теме
Комментарии
Автор

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

PythonRussian
Автор

ребят, я не удаляю никаких коментариев, кроме совсем уже отмороженных, если ваш коммент удален, то вы или код какой то там прицепили или ссылку или мат там есть, Ютуб удаляет сам. Просто вижу в почте мне пишут, что я мол удаляю комменты, это не я =)

PythonRussian
Автор

Для таких тем нужно не запись в 50 минут, а вебинар на 8 часов) с тестами, с ООП, с архитектурой. с использованием различный паттернов. Можно реальную лекцию подготовить) Так же конечно можно рассказать что бывают и RLock и что все это может работать с контекстным менеджером) А еще бывают семафоры, барьеры и куча всего бескрайнего) Провести аналогии с multiprocessinig, то как одни могут порождать других. И все это весьма интересно и Автор конечно прав, это вершина айсберга и нужно глубоко самому погружаться в вопрос. На русском языке в сети скудно с данной инфой, к сожалению.

Miron_Nicolaevich
Автор

Хороший выпуск. Пул потоков тоже создает потоки, там все те же низкоуровневые обращения к ОС, просто они могут быть переиспользованы (вызывать задачу несколько раз с разными наборами аргументов). В остальном - замечательное видео.

non
Автор

17:12 Главный поток завершился, но не умер. Главный поток будет ждать завершения всех недемоничесих потоков.
def background_task(mainthread):
print("Фоновый поток начал работу")
time.sleep(2)
print(f"Основной поток жив? {mainthread.is_alive()}") # False
active_threads = [thread.name for thread in threading.enumerate()] # ['MainThread', 'Thread-1 (background_task)']
print(active_threads)
print("Фоновый поток завершил работу")
Передайте основной поток в функцию и убедитесь, что он присутствует в списке активных потоков! ) Дело в том, что этот поток особенный, даже если у нег is_alive()=False - он остается в списке активных потоков до завершения программы.

Desgner
Автор

В вашем объяснении все начинает играть другими красками)

marinatsoy
Автор

Здравствуйте! Ваш канал - жемчужина из себе подобных. Благодарю за подробное объяснение. Я начинающий в этой сфере и пытаюсь своими силами изучить Питон в свободное от работы время. Могли бы записать видео о фреймворках? Например Джанго. Спасибо.

hgnomzy
Автор

Супер интересная тема. Когда изучал, случился очередной инсайд. Автор говорит что это сложная тема, даже для олдов. Но на удивление, сейчас это требуются даже от джунов, но это не означает что это просто))

Miron_Nicolaevich
Автор

Вопрос про использование демонических потоков с join(). Разве это не полный аналог запуска недемонического потока? Ожидание продлится до завершения потока в обоих случаях. В чем профит? Ведь если есть join() потока, то его никто прибивать до его завершения не будет?

Desgner
Автор

27:54 То что вы рассматриваете, это не состояние гонки, а ситуация с устареванием данных. Введение задержки просто приводит к потере актуальности данных. Потоки не конкурируют за ресурс, они просто оперируют устаревшими данными. Хотите гонки? Пишите данные из разных потоков в один файл!). И думать, что скорость переключения потоков - это постоянные пять миллисекунд - заблуждение!) Поставьте в свой скрипт задержку в 0.001 секунды (в пять раз меньше) все равно получите искаженные данные.

Desgner
Автор

24:13 Когда происходит одновременный старт 10_000 потоков, то подозреваю, что выполнение CPU-bound вычислительной задачи происходит по любому последовательно, действие за действием. Еще есть подозрение, что система не создает одновременно 10_000 активных потоков, ведь ранее, было сказано, что это число ограничено?

Desgner
Автор

Привет, можешь рассказать что нужно знать, чтобы писать веб и стать джуном на питоне

hdhdjdjdjjd
Автор

что можешь сказать про либу gevent? она вроде бы убирает gil

Chelk
Автор

Кто то подскажет, в каком видео был разбор схемки на 4:21

vladsnk
Автор

потоки, процессы сложные если разбираться без практики. На степике есть курсы по этой теме с практикой. Не скиллбокс и ЯП за стопицот денег а адекватные.

non
Автор

Сэр, мне нужно мнение эксперта, и ваши навыки не вызывают сомнений.
Как вы относитесь к накрутки опыта в разработке?
Если другие варианты?
У меня сейчас 2 резюме и единственное, что в них различается, это количество опыта, но на одном 2 отлика (о опыта), а на другом 26 (1.6 опыта).

quansumonner
Автор

В python потоки лучше всего умеют это спать

Chelk