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