Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2021 January 25

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
если ты хочешь использовать только синхронные функции - тебе нужна вытесняющая многозадачность
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
если ты используешь только асинхронные - у тебя наступает callback hell в итоге
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
собственно вопрос в том - как взять лучшее из обеих концепций
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
синхронная функция возвращает результат, асинхронная - вызывает колбэк который в нее передается
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
поэтому нельзя вызвать из синхронной функции асинхронную т.к. синхронной функции нужен результат прямо сейчас, а результат асинхронной функции определится в будущем
если говорить про питон - что происходит при вызове await
передается управление планировщику
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
когда асинхронная функция вернет результат - планировщик в этом месте его подставит как будто была вызвана синхронная функция
источник

БГ

Бензофуран Гетероцик... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
если ты используешь только асинхронные - у тебя наступает callback hell в итоге
Кстати не всегда же)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Бензофуран Гетероцикл
Кстати не всегда же)
зависит от размера проекта
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
тут рассматриваются крайние случаи
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в чем проблема
дофига колбэков - проблема
когда ты не можешь установить связи между компонентами программы
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
но и дофига потоков и примитивов синхронизации типа мьютексов - тоже проблема
когда ты можешь конечно установить связи и в рамках каждого потока программа выполняется последовательно
но это требует накладные расходы на переключение контекста
и синхронизацию
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
и прикол Go в том что он устранил различие между синхронным и асинхронным кодом.
источник

БГ

Бензофуран Гетероцик... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Вот хорошо с однозадачностью-то было, а)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в Go - не нужно думать - синхронная это функция или асинхронная
например когда ты какой то IO делаешь
в питоне  это проблема
если ты из асинхронной функции вызовешь какую-нить IO функцию - например чтение файла
ровно в этом месте все остальные корутины будут заблокированы
до тех пор пока не вернется результат этой функции
медленной
и не вернется управление планировщику
в Go такой проблемы нет
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ты в горутинах можешь читать файлы
и ниче не будет блокироваться
при этом код будет выглядеть как синхронный
но выполняться асинхронно
источник

БГ

Бензофуран Гетероцик... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
в Go - не нужно думать - синхронная это функция или асинхронная
например когда ты какой то IO делаешь
в питоне  это проблема
если ты из асинхронной функции вызовешь какую-нить IO функцию - например чтение файла
ровно в этом месте все остальные корутины будут заблокированы
до тех пор пока не вернется результат этой функции
медленной
и не вернется управление планировщику
в Go такой проблемы нет
Подожди
Питоновский асинк под капотом треды ещё юзает, так что получение-отправка данных будет "в фоне" происходить если ты что-то заблокировал
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Бензофуран Гетероцикл
Подожди
Питоновский асинк под капотом треды ещё юзает, так что получение-отправка данных будет "в фоне" происходить если ты что-то заблокировал
асинк в одном потоке работает
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в этом как бы суть
источник

БГ

Бензофуран Гетероцик... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
асинк в одном потоке работает
Он тредпулы использует, если что)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в какой версии
источник