Серия небольших чатов PyCon 2018: сводка об использовании асинхронного режима в Facebook

задняя часть Python Django PyCon Facebook

Видео с PyCon 2018 только что выложили, и я его только что придумал. Затем я связался с PSF, чтобы узнать, могу ли я разрешить ему вернуться в Китай для просмотра.

Во-первых, я сделал только два видео,

John Reese - Thinking Outside the GIL with AsyncIO and Multiprocessing

Andrew Godwin - Taking Django Async

Одним из них является применение async/await в группе Facebook, о котором говорил большой парень из Facebook, и, кстати, наконец-то продал рекламу.

Другой — большой парень в группе Django.Об async/await и одновременном продвижении ASGI — отдельная тема.

Сегодня вечером я расскажу о видео на Facebook и добавлю второе видео ==

Во-первых, это видео на Facebook очень короткое, но я думаю, что смысл очень важен.

Во-первых, в течение всего процесса не требуется особых навыков, что очень удобно для новичков, желающих познакомиться с миром Python 3.

Во-вторых, здесь не только рассказывается об асинхронности, методе с интенсивным вводом-выводом, но и обучаются некоторым навыкам использования многопроцессорной обработки.

В-третьих, выйдите из платформы, вы видите, что ее используют крупные производители, можем ли мы тоже попробовать?

ок, вернемся к теме

Прежде всего, босс группы Facebook рассказал свой сценарий использования

image

Главным среди них является необходимость запрашивать данные со многих интерфейсов и интегрировать их.

Сначала они использовали пул потоков для выполнения таких операций ввода/вывода под Python 2, а потом выяснили, брат, что это не так QAQ

image

Объем памяти велик, и он по-прежнему ограничен GIL. Затем они начали обновлять код до Python 3 (здесь голос за кадром, GIL был изменен один раз в Python 3.2, чтобы потоки работали лучше, см.Что нового в Python 3.2) Ну нашел после апгрейда

image

Улучшение производительности хорошее ==, так что день убьет Python 2.

Ну и еще большая проблема, что делать с ГИЛом.

Facebook дает два варианта

Первый, многопроцессорный

image

Затем дал небольшой трюк, чтобы использовать

image

Второй, асинцио

image

Сказал три особенности asyncio,

Первый — это использование шаблона Future (шаблон Future был введен в Python 3.2, предложен в PEP 3148, см. PEP 3148 — futures — выполнение вычислений асинхронно).

Во-вторых, asyncio быстрее, чем потоки.

В-третьих, параллелизм ввода-вывода

Затем он показывает самое простое использование asyncio.

image

Затем босс Facebook долго рассказывал о том, как совместить многопроцессорность и асинхронность, я не буду спойлерить здесь, вы можете пойти и посмотреть

Но есть одна вещь, которая мне нравится

image

Угадайте, в чем здесь изюминка?

Что ж, аннотация нового типа объекта использовалась, когда предыдущая функция была определена еще вPEP 484Типовые подсказки предложили ввести 3.5, и несколько последующих предложений были оптимизированы вокруг этого, например, 3.6.PEP 526, 3,7 изPEP 563Но это длинная история, давайте успеем написать острую куриную гидрологию и поговорим об этом в другой раз.

Тем не менее, type-annotation — это тенденция, и после ее использования в среде IDE опыт подсказок и проверок будет улучшен до более высокого уровня.

В итоге босс фейсбука лихо скинул картинку,

image

потом закинул библиотеку

jreese/aiomultiprocessзначок Это видео заканчивается здесь,

Хорошо, позвольте мне рассказать вам мои мысли

Во-первых, наша компания использует async/await, этот набор широко используется многими. В процессе ввода года я обнаружил, что официальный набор asyncio имеет много потенциальных ям, но его производительность действительно хороша. Поэтому я делаю это сладким ядом. Однако, несмотря на то, что я уже вычеркнул текущие столпы async/await в asyncio/Sanic/aiohttp, по правде говоря, async/await — очень значимая и полезная функция. В то же время окружение сообщества постепенно растет, например, python-trio/trio, и все больше и больше крупных компаний начинают его использовать и наступать на яму. Хотя я не осмеливаюсь сказать, что у async/await светлое будущее, но с последующим развитием он станет предпочтительным выбором для людей при работе с приложениями, интенсивно использующими ввод-вывод.

Итак, давайте сделаем это первым.

Кроме того, какое видео Django, прежде чем смотреть, рекомендуется посмотреть видео, предложенное командой разработчиков Django, которое все еще находится в черновике в качестве текущего PEP3333.PEP 3333 -- Python Web Server Gateway Interface v1.0.1Подробнее о предложении заменить ASGI на WSGI см.ASGI - Channels 2.1.1 documentation