Это работает только когда операции завершаются внутри функции? А как поступать если функция должна вернуть результат и программа продолжилась? Допустим программа пробегается по шапкам страниц поочередено в цикле, если условия удовлетворяют, то посылает запрос в функцию, спарсить страницу и вернуть результат, на основании результата решает сохранять его в список или нет. Такая программа большая часть времени будет ожидать возврата результата, так как парсинг не быстрый. Можно в этом случае использовать асинхронное программирование? П.с. Я так понимаю наверно нужно делать все расчеты внутри функции в том числе и расчет добавлять в список или нет и возвращать его в глобальной переменной?
Когда ты пишешь асинхронный код ты не можешь использовать блокирующие функции (time.sleep, socket, select, ...) так как они локнут твой событийный цикл. Вне зависимости от асинхронного фреймворка: asyncio, gevent, eventlet, trio и т.д, все они имеют свои неблокирующие аналоги блокирующим функциям из стандартной библиотеки. Хотя стоит отметить, что в gevent существует механизм изменения объектов при непосредственной работе программы, называется он monkey patching. Суть его в том что ты можешь использовать блокирующую функцию при написании кода, а gevent сам сделает с нее асинхронную в момент запуска интерпретатора. В интернетах говорят что так делать не желательно, так как по сути это магия. У меня нет знаний что бы это опровергнуть, но я сам использую манкипатчинг в своим проектах, пока проблем не было. Надеюсь я ответил на твой вопрос.
Пздц, почти 10 лет никто и ничто не могло мне объяснить "эмуляцию" мультипоточности в одном потоке пайтона. Звучало как бред и противоречие, слыхал ранее но ни йоту не понимал. Спасибо. Вот она, ядро отличия от Го. От "истинной" мультипоточности
🤦♂ Я же начал урок с обычной не асинхронной функции и логично, что в ней был классический sleep, но к 8 минуте в коде используется asyncio.sleep и объясняется почему обычный sleep не подходит.
Видео не смотри, комментарии пиши. Или пускай сопли, школотрон недоношенный! Одно из лучших пояснений. Ты само много в своей жизни настолько доступных диаграмм нарисовало? То-то же!!
Не прибегая к помощи модуля async вызов можно сделать с помощью функций from time import sleep from time import time start = time() def site3(c, n): print(n, c) def site2(b, n): print(n, b) def site1(a, n): print(n, a) def site(a, b, c): for num in range(1, 4): sleep(1) site1(a, num) site2(b, num) site3(c, num) print()
Всё проще чем я думал. Шикарное видео. Благодарю!
Не ожидал от автора настолько достойного подхода, признаться, приятно удивили.
Божечки мои, почему мне раньше было всё это непонятно?
Огромное спасибо!
да, очень доступно исполнено.
Да, шикарное объяснение. Спасибо!
Огромное спасибо! Много материала просмотрел по асинхронному программированию , но это видео помогло снять с меня этот необъятный блок непонимания.
Отличное объяснение, все ясно и понятно.. Спасибо..
Великолепное объяснение! Благодарю!!! Подписка +1, колокол +, комментарий для продвижения канала +
Мне понравилось, как ты объясняешь. Продолжай в том же духе
Спасибо, очень последовательно и доходчиво
Шикарно. Наконец-то свет в конце тоннеля))
1:30 ёп! внутри меня тоже есть такой кот, который ничего не делает
Прекрасное видео, большое спасибо!
Доступно объяснил! Спасибо!
Всё чётко и понятно. Спасибо! 👍
Круто! Спасибо)
Самый недооцененный туториал
Спасибо!
Код точно так же, но выходит ошибка This event loop is already running. странно
Это работает только когда операции завершаются внутри функции? А как поступать если функция должна вернуть результат и программа продолжилась? Допустим программа пробегается по шапкам страниц поочередено в цикле, если условия удовлетворяют, то посылает запрос в функцию, спарсить страницу и вернуть результат, на основании результата решает сохранять его в список или нет. Такая программа большая часть времени будет ожидать возврата результата, так как парсинг не быстрый. Можно в этом случае использовать асинхронное программирование?
П.с. Я так понимаю наверно нужно делать все расчеты внутри функции в том числе и расчет добавлять в список или нет и возвращать его в глобальной переменной?
Ответ на ваш вопрос есть в следующих видео.
Так вот что такое корутины спорограммы, иелд
а если я не могу заменить sleep() на асинхронный?
Когда ты пишешь асинхронный код ты не можешь использовать блокирующие функции (time.sleep, socket, select, ...) так как они локнут твой событийный цикл. Вне зависимости от асинхронного фреймворка: asyncio, gevent, eventlet, trio и т.д, все они имеют свои неблокирующие аналоги блокирующим функциям из стандартной библиотеки. Хотя стоит отметить, что в gevent существует механизм изменения объектов при непосредственной работе программы, называется он monkey patching. Суть его в том что ты можешь использовать блокирующую функцию при написании кода, а gevent сам сделает с нее асинхронную в момент запуска интерпретатора. В интернетах говорят что так делать не желательно, так как по сути это магия. У меня нет знаний что бы это опровергнуть, но я сам использую манкипатчинг в своим проектах, пока проблем не было. Надеюсь я ответил на твой вопрос.
@@sap2me ты крут
Асинхронка в отличии от ООП очень легкая!
Чтобы было более понятно, нужно было асинхроность объяснять на простых функциях, с колбеками на yeld а не сразу с сайд либы!
Означает ли это, что теперь можно обойтись без Node.js, только Python? Так как это абсолютно одинаковое решение в обоих языках?
Нет, нельзя - только nim-lang, только хардкор
Потоки выполняются в одном процессе и одном ядре, логично что они так же не параллельны а асинхронные.
Пздц, почти 10 лет никто и ничто не могло мне объяснить "эмуляцию" мультипоточности в одном потоке пайтона. Звучало как бред и противоречие, слыхал ранее но ни йоту не понимал. Спасибо. Вот она, ядро отличия от Го. От "истинной" мультипоточности
С каких пор асинхронность запускается в разных потоках? Автор вроде путается в многопоточности и асинхронности
Я минимум два раза в видео говорю, что асинхронность работает в одном потоке. Даже слайд привожу на эту тему. Вы видео, вообще, смотрели?
К Р А С И В О
Sleep блокирующий в асинхронном коде, вы весь код кирпичили своим слипом
🤦♂ Я же начал урок с обычной не асинхронной функции и логично, что в ней был классический sleep, но к 8 минуте в коде используется asyncio.sleep и объясняется почему обычный sleep не подходит.
Видео не смотри, комментарии пиши. Или пускай сопли, школотрон недоношенный! Одно из лучших пояснений. Ты само много в своей жизни настолько доступных диаграмм нарисовало? То-то же!!
Не прибегая к помощи модуля async вызов можно сделать с помощью функций
from time import sleep
from time import time
start = time()
def site3(c, n):
print(n, c)
def site2(b, n):
print(n, b)
def site1(a, n):
print(n, a)
def site(a, b, c):
for num in range(1, 4):
sleep(1)
site1(a, num)
site2(b, num)
site3(c, num)
print()
site("google", "yahoo", "yandex")
print(f"time end: {round(time() - start, 2)}")
sleep это функция которая симулирует время покдлючения к сайту.
incredible