Threading Python # 1. Multithreading in Python with simple examples
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
Именно от количества лайков и комментариев я понимаю что нужно
продолжать делать видео. Не забывайте проявлять свою активность :)
Спасибо за уроки! Полезно, кратко и по фактам. Очень помогло.
Супер, спасибо за доходчивую подачу. Иду смотреть дальше
Круто =)
Как только начинаю искать новый материал, выходит твоё подходящее видео! Спасибо
Рад что получается угадывать нужный материал) Спасибо
*Очень полезно, спасибо.*
Благодарю :)
Привет
Спасибо огромное, комментарий для продвижения!
Спасибо
Все понятно)
:)
ооо , интересно , познавательно , лайк , подписка , колоколтчик
Спасибо :)
Спасибо за урок, существует много книг по питон, но там мало освещяет эту тему
Согласен
спасибо за труд! посмотрел один раз, пока почти ничего не понял
7:10 на мой взгляд, удобнее вызывать через threading.Thread(target=lambda *_: get_data("b", time.time)).start(), потому что не приходится возиться с именованным параметром
его же можно вообще не указывать
Очень хорошо, хотелось бы больше практических примеров, чтобы выглядело естественно, а также ссылочки на какие-нибудь статьи или книги, где хорошо описана тема из урока.
Спасибо за него, успехов.
Благодарю
Хорошо, что прочёл твой комментарий до просмотра. Без примеров это видео для меня бесполезно.
Спасибо тебе чел🤗
Пушка
Здравствуйте! Нихуя не понял, но очень интересно. Спасибо.
:)
thanks
😎😎
Здравствуйте. Подскажите пожалуйста, как с помощью потока запустить выполнение асинхронной функции, внутри которой есть обращение к ещё одной асинхронной функции?
Подскажите пожалуйста , есть написанный скрипт, он каждый час парсит цены с одного магазина. и записывает в переменную в виде словаря, как сделать так что бы, если пользователь в телеграмме при выборе команды /мониторить ,скрипт каждый час проверял переменную и если по заданным настройкам есть данные то , пользователю присылать эти данные с словаря. У каждого пользователя свои настройки по товарам. Использую aiogram Спасибо
Хуе его знает
Топчик
Благодарю :)
@@zproger я прям ждал этого, если еще будет про асинхроность - что это такое, как это работает, и что делать если надо асинхронно, но внутри есть синхронные функции. Даже задоначу косарик, вообще не жалко
после этого курса как раз планировался курс по асинхронности :)
@@zproger asyncio aiohttp aiostream 👍😁
на 8,56 видно что основной поток и созданный отдельно работают параллельно. Но у меня так не получается. Сначала новый после .start(), потом основной продолжает
Большое количество ошибок в ролике, люди, которые впервые встречаются с многопоточностью в питоне будут иметь неправильное представление работы потоков, джоинов. Надо было как минимум объяснить почему если у нас есть GIL, то исполняя программы из видео многопоточность все-таки как будто существует, рассказать про то, что на самом деле делает функция time.sleep() и другие блокирующие поток функции.
А еще, мил человек, я вот как опытный программист со стажем, освоивший лист компрехеншонсы, хотел бы узнать у вас, в чем разница между многопоточностью и асинхронностью и как они оба в плане секса? А? М? Спасибо, жду нового видео!
:/
че ты такой язвительный? А? М? Спасибо, жду новый комментарий!
У меня такой вопрос почему очень часто в перечисление аргументов функции ставиться запитая, как например:
threading.Thread(target=get_data, args=(str(time.time()), i,), name = f"thr-{i}")
почему после i запитая?
потому что в args передается кортеж
@@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:
@@zproger обязательно кортеж? а список?
@@gpankov Thread args принимает итерабельные обьекты. Тобишь, и список и кортеж тут работают
@@gordeytsy283 видимо из-за того что () также используются и в операциях вычисления. К примеру (3+3) * 9. А так, если там стоит запятая, то скобки уже воспринимаются как обьект кортеж
как с потока ответ получить?
Как создавать настраиваемое количество потоков просто задавая их количества ане экземпляр?
Почему на 14:30 выводится [thr-1], [thr-2], [thr-2]? Дважды выводится с номером 2, и где thr-0?
Если я запустил программу, например по бесконечному пребавлению (1000+1+1+1...), и запустил второй экземпляр программы где я пребавляю (2000+1+1+1...), будет ли это считаться, что я запустил два потока?
Нет, потому что это два разных процесса. Сам же сказал, что это второй экземпляр программы, а потоки это, можно сказать, ветвления одной программы.
Ну, я так понимаю.
Пришлось несколько раз пересматривать. С первого раз вообще ничего не понятно, очень сложно.
Ага, эта тема не всегда сразу воспринимается, нужно немного времени и попыток
не подскажите где можно изучить асинхронность, а то я в нете ниче толкового не могу найти
Официальная документация, ну и кроме этого есть много статей
@@zproger эх, жаль что приходится по кускам собирать)
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, *, daemon=None):
* - что это значит? можете ссылку кинуть где почитать?
Последний пример с поочередным выполнением потоков можно сделать с помощью асинхронности? Если да - то какая разница?
Асинхронность работает абсолютно по-другому, когда будет курс на эту тему я рассмотрю разницу
лучше использовать потоки из pyqt/pyside там больше контроля над потоками есть
Ну это лучше в Qt проекте, но в обычной cli программе это не уместно, кстати про сигналы также будет видео :)
Я как новичок, честно ничего не понимаю, такое ощущение что ты делишься своими знаниями делишься со своими коллегами которые так же все это знают -_-
Про args вообще не понял, что это и зачем нужно.
Upd. Возможно понял. Так как в target мы передаем объект функции, то в args мы передаем аргументы с которой нужно вызвать эту функцию, правильно?
Да, все верно
без библиотек можно вот так:
while True:
a=1
while a==1:
a=0
print("test")
while a==0:
a=1
print("test1")
ничего сложного как по мне, только это не совсем многопоточность, а аналог этого
Мне показалось, или это отсылка к GIL?)
@@zproger я видео не полностью смотрел, лень было)И этот код нужен что несколько циклов бесконечных не останавливали другие, так что смысл от этого есть
Почему так мало просмотров у таких более сложных тем? Людям что потоки не нужны😂
Вот этот фактор и отталкивает снимать сложные темы, они как правило никому не интересны, если даже сейчас с аудиторией в 110к подписчиков я сделаю к примеру какой-то бесплатный курс по асинхронности, то на видео будет по 800 просмотров, поэтому смысла от таких видео нет.
Создать поток, вызывающий функцию с print это понятно. А если мне нужно создать поток, который вызывает функцию, возвращающую результат, и с этим результатом потом работать.
Всё хорошо, но было бы отлично если б была более четкая дикция...Много слов слышны только наполовину, так как они съедаются в попытке быстрее донести информацию. В итоге вместо того, чтоб на ходу переваривать услышанное, приходится перематывать назад и разбирать, что же вообще было за слово сказано: двойная работа, от которой быстро закипает мозг)) Лучше говори помедленнее, но чётко, а потом ускорь при обработке.
Вспомнил JS: потоки умеют нагружать CPU и спать , а асинхронность заставляет 1 ядро за все потоки работать.
Так что не надо своих демонов пропагандировать, помню бота на сервак поставил с ними и он , после второго клиента, не проснулся...
Потоки это всего лишь инструмент и он применяется только по назначению, ту же асинхронность тоже далеко не везде будет правильно использовать
тяжело... смотрела на скорости 0.8
очень бы хотелось видеть вместо футажей в начале слайды, которые бы +- дублировали устный текст
футажи отвлекают, а тема и так не простая
Спасибо, учту
@@zproger Спасибо вам за полезные видео!
Есть просьба излагать материал чуть медленнее. У вас очень быстрый говор. Я понимаю, когда человек владеет информацией, он может быстро излагать мысли. Но для того, кто впервые смотрит видео, приходится пересматривать по несколько раз, чтобы уловить и код и слова.
Потоки почему-то легко зашли и на питоне и на с++, а вот асинхронность разными способами я с трудом тяну. Странная хрень🤡
нихрена не поняла😂
Совсем простые примеры 😂😂😂 вы бля иждеваетесь
Разве нет?)
Мультипроцесність а не мультипроцесорність