Это работает только когда операции завершаются внутри функции? А как поступать если функция должна вернуть результат и программа продолжилась? Допустим программа пробегается по шапкам страниц поочередено в цикле, если условия удовлетворяют, то посылает запрос в функцию, спарсить страницу и вернуть результат, на основании результата решает сохранять его в список или нет. Такая программа большая часть времени будет ожидать возврата результата, так как парсинг не быстрый. Можно в этом случае использовать асинхронное программирование? П.с. Я так понимаю наверно нужно делать все расчеты внутри функции в том числе и расчет добавлять в список или нет и возвращать его в глобальной переменной?
Когда ты пишешь асинхронный код ты не можешь использовать блокирующие функции (time.sleep, socket, select, ...) так как они локнут твой событийный цикл. Вне зависимости от асинхронного фреймворка: asyncio, gevent, eventlet, trio и т.д, все они имеют свои неблокирующие аналоги блокирующим функциям из стандартной библиотеки. Хотя стоит отметить, что в gevent существует механизм изменения объектов при непосредственной работе программы, называется он monkey patching. Суть его в том что ты можешь использовать блокирующую функцию при написании кода, а gevent сам сделает с нее асинхронную в момент запуска интерпретатора. В интернетах говорят что так делать не желательно, так как по сути это магия. У меня нет знаний что бы это опровергнуть, но я сам использую манкипатчинг в своим проектах, пока проблем не было. Надеюсь я ответил на твой вопрос.
🤦♂ Я же начал урок с обычной не асинхронной функции и логично, что в ней был классический 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. странно
Чтобы было более понятно, нужно было асинхроность объяснять на простых функциях, с колбеками на yeld а не сразу с сайд либы!
Асинхронка в отличии от ООП очень легкая!
Это работает только когда операции завершаются внутри функции? А как поступать если функция должна вернуть результат и программа продолжилась? Допустим программа пробегается по шапкам страниц поочередено в цикле, если условия удовлетворяют, то посылает запрос в функцию, спарсить страницу и вернуть результат, на основании результата решает сохранять его в список или нет. Такая программа большая часть времени будет ожидать возврата результата, так как парсинг не быстрый. Можно в этом случае использовать асинхронное программирование?
П.с. Я так понимаю наверно нужно делать все расчеты внутри функции в том числе и расчет добавлять в список или нет и возвращать его в глобальной переменной?
Ответ на ваш вопрос есть в следующих видео.
Потоки выполняются в одном процессе и одном ядре, логично что они так же не параллельны а асинхронные.
Так вот что такое корутины спорограммы, иелд
Означает ли это, что теперь можно обойтись без Node.js, только Python? Так как это абсолютно одинаковое решение в обоих языках?
Нет, нельзя - только nim-lang, только хардкор
С каких пор асинхронность запускается в разных потоках? Автор вроде путается в многопоточности и асинхронности
Я минимум два раза в видео говорю, что асинхронность работает в одном потоке. Даже слайд привожу на эту тему. Вы видео, вообще, смотрели?
а если я не могу заменить sleep() на асинхронный?
Когда ты пишешь асинхронный код ты не можешь использовать блокирующие функции (time.sleep, socket, select, ...) так как они локнут твой событийный цикл. Вне зависимости от асинхронного фреймворка: asyncio, gevent, eventlet, trio и т.д, все они имеют свои неблокирующие аналоги блокирующим функциям из стандартной библиотеки. Хотя стоит отметить, что в gevent существует механизм изменения объектов при непосредственной работе программы, называется он monkey patching. Суть его в том что ты можешь использовать блокирующую функцию при написании кода, а gevent сам сделает с нее асинхронную в момент запуска интерпретатора. В интернетах говорят что так делать не желательно, так как по сути это магия. У меня нет знаний что бы это опровергнуть, но я сам использую манкипатчинг в своим проектах, пока проблем не было. Надеюсь я ответил на твой вопрос.
@@sap2me ты крут
К Р А С И В О
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