background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Оптимизация Django. 5 - Celery + Docker"

input logo icon
Теги видео
|

Теги видео

django
python
web
api
программирование
разработка
сайт
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
Привет Сегодня Мы открываем такую
00:00:01
интересную тему как salary в двух словах
00:00:05
Перед тем как мы начнем установку я
00:00:07
расскажу может быть если кто-то не знает
00:00:09
вообще что это такое зачем это нужно как
00:00:13
это используется значит целоре это
00:00:17
это такой пакет скажем для питона
00:00:22
при помощи которого мы можем запустить
00:00:25
как бы salary Server то есть вот как мы
00:00:29
запускаем сейчас Джанго девелопер сервер
00:00:31
да Или как бы не корм скажем запускает
00:00:34
там джанка продакшн сервер также и
00:00:38
selary это такая некоторая
00:00:41
запущенный такой сервис запущенный
00:00:43
сервер можно сказать куда мы можем
00:00:45
передавать задачи или таски как это
00:00:49
называется в терминологии севери и они
00:00:52
там будут запускаться и выполняться
00:00:56
отдельно от самого
00:00:58
приложения если сказать точнее
00:01:02
то с адресом забирает таски из очереди
00:01:06
задач Если резюмировать да у нас есть
00:01:09
Джанго приложения вот мы хотим запустить
00:01:11
какую-то задачу мы кладем ее в очередь
00:01:15
потом salary когда он скажем
00:01:19
освобождается от его текущих задач Да он
00:01:22
берется за через новую задачу выполняет
00:01:24
ее и так далее берет из очереди все
00:01:27
задачи пока там они не кончатся То есть
00:01:29
он как бы мониторит очередь задач на
00:01:32
выполнение Зачем вообще все это нужно
00:01:34
делать здесь Довольно простой ответ Если
00:01:37
у нас есть какой-то функционал который
00:01:39
скажем отрабатывает
00:01:41
долгая Да какие-то пересчеты
00:01:44
в общем что-то что отрабатывает не
00:01:46
моментально
00:01:47
то мы не можем это делать напрямую с
00:01:51
запроса с фронтендо потому что Джанго в
00:01:53
принципе да вот как приложение оно
00:01:55
Рассчитано на то что все что она делает
00:01:58
это инициирует какой-то запрос с API или
00:02:02
запросов веб-страницы в общем какой-то
00:02:04
запрос то есть кто-то зашел на страницу
00:02:07
Да там
00:02:08
URL какой-то вызвался у Джанги кот
00:02:10
запустился отработал соответственно
00:02:12
результатом отработки этого кода будет
00:02:14
возврат какого-то http ответа тому кто
00:02:18
запросил так вот целый как бы можно
00:02:21
сказать что он делает из джанга
00:02:25
синхронное приложение по своей сути
00:02:28
то есть пользователь мог что-то вызвать
00:02:31
какой-то URL
00:02:32
на этом руле у нас была задача selvery
00:02:35
она как бы ушла в очередь на выполнение
00:02:38
и пользователь вернулся ответ типа OK
00:02:41
ваш запрос направлен вот мы вам там не
00:02:45
знаю вышли на результат на e-mail там
00:02:47
грубо говоря когда это будет закончено
00:02:48
это использовать не нужно ждать на сайте
00:02:52
пока крутится спиннер Да пока там он у
00:02:55
него все отработает вот то есть он нажал
00:02:57
что-то Да запустился какой-то процесс
00:02:59
который отработает в фоне и отработает
00:03:02
как бы параллельно с веб-процессом Вот
00:03:06
именно параллельность это это по сути и
00:03:10
есть
00:03:11
один из способов оптимизации в том числе
00:03:14
то есть когда мы
00:03:16
нагрузку не снижаем до А мы эту нагрузку
00:03:20
откладываем на потом то есть
00:03:24
пользователь не должен ждать Да пока все
00:03:26
это отработает и в принципе так можно
00:03:29
часто снять
00:03:31
такую проблему Когда не знаю там если
00:03:34
очень грубо сказать на сайте страницы
00:03:37
долго открывается Да потому что это
00:03:39
выполняется Мы весь этот код выносим в
00:03:41
асинхронность выносим в центре задачи и
00:03:44
У пользователя моментально страницы
00:03:45
открылась да А все что там было внутри
00:03:47
оно вычисляется уже после Но не все
00:03:50
можно вычислить после конечно какие-то
00:03:52
вещи должны быть вычислены
00:03:54
непосредственно во время запроса и Кроме
00:03:57
того что selery делает наше приложение
00:04:00
асинхронным и selery это также и
00:04:04
масштабируемые решения то есть мы можем
00:04:06
запустить несколько воркеров если у нас
00:04:09
во время работы нашего приложения
00:04:12
порождаются как бы многое
00:04:15
разных задач мы их можем просто
00:04:19
раскидать по воркерам то есть грубо
00:04:22
говоря если один запрос приводится к
00:04:25
созданию сразу трех задач да и все они
00:04:27
допустим тяжелые но мы бы хотели все это
00:04:30
вместе бы отработать побыстрее да мы
00:04:33
можем просто поднять три села реворкера
00:04:35
и эти задачи как бы по одной пойдет на
00:04:39
каждый сел reworker вот ну в реальном
00:04:42
приложении конечно задача порождаются
00:04:45
скажем каждую минуту сотнями или
00:04:48
тысячами Да и поэтому нам нужно как
00:04:50
минимум несколько седри уоркеров чтобы
00:04:52
чтобы все это успевать отрабатывать
00:04:55
быстро то есть грубо говоря один
00:04:58
reworker мог бы это обработать Я не знаю
00:05:01
за сутки да но пользователь не может
00:05:05
ждать целые сутки отправку емейла о том
00:05:07
что его платеж прошел к примеру он бы
00:05:10
хотел пораньше получить Ну хотя бы через
00:05:12
10 минут поэтому у нас есть много
00:05:15
оркеров и мы распределяем задачи между
00:05:18
ними мы это все тоже Увидим в курсе и в
00:05:22
связи с тем что у нас некоторые задачи
00:05:25
могут именно происходить параллельно
00:05:28
это накладывает как бы и дополнительные
00:05:32
требования коду и создает дополнительные
00:05:35
подводные камни поэтому В некоторых
00:05:37
случаях если мы пишем код про который мы
00:05:40
знаем что он будет выполняться
00:05:41
асинхронно мы должны и писать его как бы
00:05:45
Исходя из этого это я тоже позже
00:05:47
продемонстрирую в тосках Какие конкретно
00:05:50
проблемы возникнут мы эти проблемы
00:05:52
увидим Вот и мы их решим давайте начнем
00:05:56
откроем нашу
00:06:00
и добавим туда вот сюда вот в docker
00:06:04
compose мы добавим еще один сервис А
00:06:08
точнее даже два сервиса первый который
00:06:10
нам понадобится это
00:06:13
назовем его worker
00:06:17
потому как это будет
00:06:19
seld reworker Так значит также Билд мы
00:06:24
делаем вот как в сервисе по той причине
00:06:28
что
00:06:29
нам нужно по сути будет иметь такой же
00:06:34
запущенные Джанго приложения то есть с
00:06:37
тем же конфигом с теми же зависимости и
00:06:39
так далее
00:06:40
дальше напишем ему hostname
00:06:48
и назовем его worker
00:06:50
Так это значит как бы ну какой внутри в
00:06:54
докере да По какому
00:06:55
будет определяться этот сервис
00:07:00
N3 Point
00:07:04
это такая некоторая
00:07:07
базовая команда что ли с которой мы
00:07:10
будем вызывать другие команды к этому
00:07:12
сервису
00:07:20
дальше команд
00:07:22
и выглядит она вот так значит минус
00:07:25
большая
00:07:28
целый ряд
00:07:31
точка Up значит где цедре ап это файл
00:07:37
который мы сейчас создадим
00:07:39
и
00:07:40
Up это
00:07:41
переменная в этом файле который мы
00:07:44
сейчас создадим
00:07:46
пробел worker это значит мы пытаемся
00:07:48
сейчас создать worker
00:07:50
2 дефиса
00:07:54
Log level
00:07:56
равняется info это мы определяем уровень
00:08:00
логирования вот для данного worker Да
00:08:04
так как у нас тестовый как бы сейчас
00:08:05
режим Значит мы хотим логировать всю
00:08:09
инфу
00:08:10
то есть когда мы запустим на продакшене
00:08:12
Да мы должны Look level увеличить до
00:08:15
варлинг или до эррора
00:08:18
также как мы не можем вот это вот деф
00:08:21
сервер запускать на продакшене да то
00:08:23
есть для продакшена чуть-чуть будет
00:08:26
поправленный конфиг что нам еще нужно
00:08:29
нам надо также подмонтировать Вот
00:08:32
директорию с нашей Джанго аппкой
00:08:37
вот сюда вот монтировать ее в selary
00:08:40
потому что ну это как Джанго приложения
00:08:44
хотя мы не сможем на горячую изменять
00:08:47
центританской нам все равно придется
00:08:49
перезапускать целый worker но это уже
00:08:51
детали еще один докер сервис назовем его
00:08:55
radis
00:08:56
значит
00:08:59
Image у него будет
00:09:02
редис То есть это тоже Image из docker
00:09:06
хаба
00:09:08
двоеточие 7.05 вот я выбрал вот такую
00:09:13
версию Хотя это наверное не
00:09:15
принципиально и Пусть это будет Alpine
00:09:19
то есть такой облегченный Linux и
00:09:22
hostname мы сделаем тоже здесь
00:09:26
тоже Пусть будет редис
00:09:30
так и теперь давайте пропишем вот этот
00:09:34
рейдес еще как бы к нашему воркеру
00:09:36
значит
00:09:38
начало Надо сделать Links
00:09:41
и здесь написать редис
00:09:45
он тоже
00:09:48
K как вот этот вот
00:09:51
сервис Да и дальше чтобы сделать
00:09:54
какой-нибудь хотя бы простейший тестовый
00:09:57
Task
00:09:58
на селлари нам также надо сделать
00:10:02
еще несколько вещей Значит нам надо
00:10:04
добавить вот сюда вот целый
00:10:08
квадратных скобках
00:10:10
radis
00:10:11
то есть пакет целый версии для редиса
00:10:15
значит с номером 52 и 7
00:10:21
Так давайте его установим может быть в
00:10:24
наш вот этот вот тестовый питон 3.9
00:10:26
который нам нужен для подсветки
00:10:28
синтаксиса пакет установлен
00:10:31
и теперь нам надо сделать конфигурацию
00:10:33
вот как бы нашего джанга приложения для
00:10:35
того чтобы
00:10:36
мы могли использовать целый вместе с ним
00:10:40
и могли вызвать целый ряд tasky из него
00:10:43
Давайте создадим здесь файл просто питон
00:10:47
файл который называется salary
00:10:50
Up
00:10:52
прям вот здесь вот в корне самого Джанго
00:10:55
проекта на одном уровне с менедж пай
00:10:58
и напишем здесь OS
00:11:05
Вот так мы получаем доступ какой-то
00:11:10
переменной среды значит сет
00:11:15
сет дефолт
00:11:18
и здесь напишем джангу settings модуль
00:11:27
значит дефолтный Jungle settings модуль
00:11:29
будет у нас
00:11:32
вот такой вот
00:11:34
в кавычках сервис.сеттингс
00:11:41
то есть вот этот
00:11:43
дальше создадим целый ряд
00:11:46
напишем
00:11:47
Up такая переменная Up Да равняется
00:11:51
класс целый вот мы его за импортируем
00:11:53
сюда из salary
00:11:58
и назовем его опять Вот так вот
00:12:01
[музыка]
00:12:06
про инициализируем его вот так вот с
00:12:08
именем сервис
00:12:11
дальше делаем
00:12:13
Up config
00:12:18
From object
00:12:22
то есть и здесь напишем Джанго
00:12:29
ком это через settings
00:12:34
Я не знаю почему конкретно так не
00:12:37
спрашивайте
00:12:40
дальше
00:12:41
Up
00:12:43
Конов точка брокер URL
00:12:55
равняется
00:12:57
settings.selbroker
00:13:04
а вот переменную скорее всего Нам
00:13:07
придется создать
00:13:09
сервере брокер URL
00:13:12
и брокеры Да без буквы C
00:13:16
эти сеттинг мы должны за импортировать и
00:13:19
Джанго контф мы это традиционно делаем
00:13:26
дальше об точка
00:13:32
Auto Discover
00:13:34
tasks это чтобы сэллори автоматически
00:13:38
смотрела по всем папкам и искала свои
00:13:41
таски тут конечно Надо разбираться чтобы
00:13:43
с точностью сказать Зачем нужно вот это
00:13:46
именно вот так именно вот так
00:13:48
прописывать вот так инициализировать но
00:13:50
это делается конфигурируется один раз и
00:13:52
об этом как правило сразу же все
00:13:55
забывают
00:13:57
создадим еще один питон файл
00:13:59
назовем его инит
00:14:02
прям вот здесь вот в корне там же где
00:14:05
менедж Пай
00:14:08
из импортируем вот из этого файла целый
00:14:11
ряд
00:14:13
за импортируем из него значит
00:14:18
Up
00:14:20
это вот самый переменная до которой мы
00:14:22
сейчас создавали
00:14:25
АС то есть с каким именем с именем
00:14:29
целоре
00:14:31
и вот такую магию еще одну пропишем два
00:14:34
подчеркивание All подчеркивание
00:14:38
равняется
00:14:40
целый
00:14:44
Up вот таким образом
00:14:47
как кортеж с одним элементом
00:14:50
это делается для того чтобы как бы наши
00:14:53
цели апка стартанул вместе с нашим
00:14:57
приложением джанга и Честно говоря мне в
00:15:00
лом сидеть разбираться Почему именно вот
00:15:02
такой вот странный синтаксис Ну пусть
00:15:04
будет такой да Много учеников
00:15:06
конфигурируем но главное что после этого
00:15:10
собственно мы уже сможем пользоваться
00:15:13
севери и нам уже ничего не придется
00:15:15
настраивать создадим один таск который
00:15:17
будет тестовый и за счет него мы просто
00:15:20
проверим как в общем у нас работает Это
00:15:23
целый напишем значит
00:15:28
Task
00:15:31
вот здесь напишем
00:15:37
он должен быть у нас с декоратором
00:15:40
который мы берем Вот от этого Апа точка
00:15:45
Task
00:15:47
и значит
00:15:50
напишем здесь Times Slip просто чтобы у
00:15:54
нас этот Task он не проходил вот так вот
00:15:56
моментально за доли секунды чтобы он
00:15:59
какое-то время повисел в системе перед
00:16:01
тем как закончится Ну допустим 20 секунд
00:16:05
и здесь напишем принт
00:16:08
[музыка]
00:16:10
Hello From debuctask
00:16:18
Ну пусть будет такой тестовый Task Ну
00:16:22
вроде бы из конфигурации можно закончить
00:16:24
и наконец-то посмотреть вообще как эта
00:16:27
штука работает
00:16:29
и добавить туда уже реальные таски
00:16:31
конечно так и чуть не забыл Мы же здесь
00:16:34
Обращаемся вот к setting sentry брокеру
00:16:38
URL я его не создал давайте сделаем это
00:16:41
все эти вот сюда вот
00:16:43
и просто нижней строчкой напишем Цезарь
00:16:46
брокеру то есть мы так Джанго указываем
00:16:49
какой URL будет у этого седри брокера То
00:16:53
есть у radiss а потому как именно джанга
00:16:55
должна будет подключиться к радиусу
00:16:58
чтобы туда создавать как бы записи о
00:17:01
планируемых задачах
00:17:04
пишем Release это значит протокол по
00:17:06
которому надо подключиться Вот он как-то
00:17:09
так называется
00:17:11
как бывает http Да вот бывает
00:17:13
radis Значит hostname называется также
00:17:18
radis это то что мы прописывали вот
00:17:20
здесь у
00:17:22
radison с названием
00:17:25
Вот и дальше двоеточие
00:17:29
порт 63
00:17:32
79 это порт для редиса по умолчанию
00:17:36
такой он с ним по умолчанию сам
00:17:39
запустится слэш и вот здесь 0 1 2 можно
00:17:44
в общем ставить любую цифру Для начала
00:17:46
пусть будет 0 это таким образом мы
00:17:49
Обращаемся к базе данных то есть вроде
00:17:51
есть несколько
00:17:52
пространств видимости что ли Да вот
00:17:54
несколько баз данных и тут мы будем
00:17:56
работать вот конкретно с нулевой Давайте
00:17:59
зайдем
00:18:02
в наш докер и сделаем докер compose
00:18:05
build
00:18:07
и после него сделаем докер compose Up
00:18:13
Билд нам надо делать потому что мы
00:18:15
Обновили
00:18:16
файл докер композа Да добавили так Какие
00:18:19
новые штуки которых раньше не было Вот и
00:18:22
он сейчас их будет билдить
00:18:24
пока он бился я могу немного рассказать
00:18:27
про докер compose почему выбрали radis
00:18:32
вообще усталоре есть два варианта
00:18:34
брокера значит в качестве брокера может
00:18:37
выступать resis
00:18:39
radiss это просто Key Valio хранилище
00:18:41
это такая база да
00:18:44
и может выступать Rabbit MQ rebite MQ
00:18:47
это более это уже менеджер очередей это
00:18:50
уже не просто какая-то база мы можем
00:18:52
прописывать
00:18:53
приоритеты для тасок и тогда имея
00:18:56
очередь тасок значит в первую очередь
00:18:59
выполнять таски с высоким приоритетом и
00:19:01
так далее
00:19:03
такого делать не можем в общем rebitanq
00:19:05
немножко более настраиваемый Ну и его
00:19:08
немного
00:19:10
сложнее скажем установить с ним работать
00:19:12
поэтому для базовой конфигурации севери
00:19:14
нам Radisson более чем достаточно вот
00:19:17
если вы захотите продвинуть конфигурацию
00:19:19
можете самостоятельно разобрать Вот как
00:19:22
это делается с Рабит мккью
00:19:24
Давайте посмотрим Билд закончился это
00:19:28
значит То что все установилось Я так
00:19:30
понимаю целый тоже установился вот здесь
00:19:33
вот в рекламе и давайте сделаем докер
00:19:36
компост
00:19:41
И вот что-то уже у нас отображается до
00:19:45
похожие похожие на сэллоуи Значит так
00:19:49
как мы видим это сообщение Вот эта вот
00:19:50
буковку си это значит То что сел Рим
00:19:52
запустился Судя по всему без ошибок
00:19:55
что он подключился к своему брокеру
00:19:58
откуда он собирается забирать задачи и
00:20:02
вот он сейчас висит также как Джанго
00:20:04
девелопмент сервер Да он висит он ждет
00:20:07
он мониторит когда же там появится новые
00:20:10
задачи
00:20:13
Ну и здесь мы видим логи в принципе от
00:20:15
всех наших сервисов Да вот трейдис
00:20:18
пожалуйста
00:20:19
редисцип connections Это говорит о том
00:20:22
что radiss запустился да
00:20:25
база данных
00:20:27
selder worker и вот такой вот веб- ап
00:20:32
вот столько у нас всего сейчас запущено
00:20:35
и сразу можно посмотреть да ведь это он
00:20:38
сделает кто это у нас делает докер вот
00:20:41
контейнеры запущенные Да база данных Web
00:20:45
Up worker и radis
00:20:47
ну и имидже соответственно такие же
00:20:51
Как мы можем протестировать этот Task и
00:20:55
запустить как бы Наш первый Task в этом
00:20:59
свежеподнятом salary
00:21:01
Значит мы можем сделать довольно просто
00:21:05
так как у нас ничего подобного нет
00:21:07
фронтенде Да ничего что могло бы вызвать
00:21:10
этот Task Ну в принципе можем в админку
00:21:12
что-то добавить конечно но для начала
00:21:14
самое простое Что можно сделать это
00:21:17
написать просто вот
00:21:20
менедж пай Shell
00:21:25
то есть подключиться к шалу джанга то
00:21:28
что я думаю все уже делаю неоднократно
00:21:29
за импортировать этот седрит Task From
00:21:35
cellry Up
00:21:39
импорт дебаг
00:21:44
Task
00:21:45
он за импортировался И вообще сам
00:21:49
синтаксис использования selary он
00:21:52
невероятно простой То есть все что нам
00:21:55
нужно сделать чтобы запустить
00:21:59
вот это вот функция
00:22:01
не само по себе в питоне Да а запустить
00:22:05
ее через
00:22:07
нам надо сделать просто точка дилей
00:22:11
и она запустится уже через салты
00:22:14
вот как возврат Да у нас Вот есть такой
00:22:18
идентификатор по которой мы можем
00:22:20
посмотреть позже результат выполнения
00:22:23
функции Ну это довольно редкая задача
00:22:26
Когда нам это реально надо Поэтому пока
00:22:28
не будем на этом останавливаться
00:22:31
и лучше посмотрим
00:22:34
что
00:22:35
только что видели да у нас Hello From de
00:22:38
bug Task как раз напечатался через 20
00:22:42
секунд после того как я вызвал тоску
00:22:45
сделаем и сделал нас это кто сделал у
00:22:48
нас это сервис upworker то есть элдри
00:22:52
Уокер
00:22:53
и другой вариант который мы можем
00:22:55
сделать
00:22:57
с этим таском мы можем просто вызвать
00:23:00
его вот просто как функция без дела
00:23:04
тогда вот у нас висит теперь вся эта
00:23:08
история 20 секунд и после этого он
00:23:11
напечатает что-то здесь
00:23:13
Hello From debug Task то есть в случае с
00:23:17
дилеем мы это запускаем на воркере в
00:23:20
случае без дилея мы это просто запускаем
00:23:22
как есть синхронно как функция и вместо
00:23:26
этих 15 секунд Это могла быть какая-то
00:23:29
длинная задача с какими-то множеством
00:23:31
вычислений и так далее чтобы нам вот
00:23:34
затормаживало скажем наш фронтенд И вот
00:23:37
так пожалуйста мы вызываем все у нас вот
00:23:40
это вот
00:23:41
шел свободен мы можем делать любые
00:23:44
другие команды Да а все что там есть оно
00:23:46
выполняется
00:23:47
где-то там выграунде и потом когда она
00:23:52
выполнится оно запишет результаты в базу
00:23:54
как мы чаще всего это делаем Ну либо
00:23:56
отправить Там e-mail и так далее
00:23:58
То есть это то что делает наше
00:24:00
приложение как бы таким
00:24:03
многопоточным точнее нужно сказать много
00:24:06
процессы так Я закрою менедж пошел он
00:24:09
мне больше не понадобится
00:24:12
докер остается включенным и мы будем
00:24:15
сейчас разрабатывать один уже реальный
00:24:19
Task но перед этим я хотел бы
00:24:22
положить в репозитории вот масса кода
00:24:25
которые мы сейчас написали
00:24:28
это будет день 51
00:24:32
так посмотрим нет ли чего-то лишнего
00:24:37
вроде все правильно
00:24:43
Окей
00:24:48
и давайте сделаем еще одну вещь которая
00:24:54
нам сделает работу с эллари гораздо
00:24:56
нагляднее и то что нам обязательно
00:24:59
понадобится в следующих видео для того
00:25:01
чтобы я мог продемонстрировать некоторые
00:25:03
особенности работы асинхронных тасок
00:25:07
мы добавим вот сюда вдоль компос еще
00:25:11
один сервис
00:25:13
у нас уже их очень много
00:25:16
и он будет называться фловера вот так
00:25:20
Flower это такое
00:25:23
веб-приложение
00:25:24
со своим
00:25:27
интерфейсом Да со своим визуальной
00:25:30
оболочкой Где мы можем наглядно
00:25:32
просматривать Какие в данный момент
00:25:35
tasky запущены Какие уже отработали и
00:25:38
так далее довольно удобная штука значит
00:25:41
Билд опять точно такой же из того же
00:25:45
самого образа создаем нашего Джанго
00:25:47
приложения
00:25:48
Host name Ну пусть будет такой же фловер
00:25:52
это не принципиально
00:25:56
entry Point должно быть такая же как и в
00:25:59
selary то есть это мы запускаем
00:26:02
программу salary
00:26:05
но команда уже будет выглядеть немножко
00:26:07
по-другому она будет выглядеть
00:26:10
Значит также минус асдере об А вот здесь
00:26:14
будет уже не worker а Flower
00:26:17
это имя
00:26:20
этой программы которую мы запустим
00:26:24
Значит также нам надо будет
00:26:26
подмонтировать вот сюда вот
00:26:30
наш проект Джанго Ну и такие же
00:26:33
зависимости у него вот как у нашего села
00:26:36
реворкера то есть тоже есть линкс с
00:26:40
редисом и Есть зависимость от редиса
00:26:43
это означает то что он будет запущен
00:26:45
после того как начался запуск
00:26:48
ravison и что нам еще надо сделать это
00:26:51
обозначить порты по моему дефолтный порт
00:26:55
для него это 45
00:27:00
на самом деле это не очень важно Это
00:27:03
просто мы как бы пробрасываем в этом
00:27:06
контейнере вот этот порт к нам наружу в
00:27:09
наш локальную машину
00:27:13
и последняя что нам нужно сделать
00:27:16
это вот сюда возле аквариуминг добавить
00:27:21
пакет с названием Flower и версии
00:27:25
1.2.0 на данный момент
00:27:28
Это вроде бы последняя версия так можем
00:27:32
установить его хотя это не обязательно
00:27:34
вот Ну пусть локально будет установлен
00:27:38
Да этот питон триплитатор но я
00:27:40
рассказывал он не имеет никакого
00:27:43
отношения к проекту их докеру
00:27:44
используется для подсветки синтаксиса
00:27:46
значит делаем опять докер compose build
00:27:52
и делаем докер compose Up
00:27:57
значит можно зайти в сафари и открыть
00:28:01
127001 и вот порт который мы дали для
00:28:04
фловера это 5 пятерок
00:28:08
сейчас Давайте посмотрим как он будет
00:28:11
реагировать на какие-то целые таски
00:28:14
которые мы можем запускать
00:28:18
я опять открою новый
00:28:21
окно терминала и напишу
00:28:24
опять менедж поищем
00:28:27
здесь From
00:28:29
salary Up импорт
00:28:33
дебаг Task вроде бы это так должно
00:28:36
выглядеть мир дибак Task вызывая его
00:28:39
сделаем
00:28:42
Угу и идём смотреть Один активный танк
00:28:46
он выполняется сейчас он выполняется у
00:28:50
нас 20 секунд как Мы помним и вот он
00:28:52
ушел из активного Да и перешел в успешно
00:28:57
выполненные
00:28:58
Ну соответственно если мы его еще раз
00:29:00
вызовем он также сюда встанет задачей и
00:29:03
вот они все будут
00:29:05
выполняться
00:29:11
4
00:29:14
раз два
00:29:17
0
00:29:18
здесь можно сделать вывод Да что он
00:29:21
запускает их по очереди и сначала
00:29:24
очередь накапливается а потом постепенно
00:29:27
она как бы уменьшается Да и таска
00:29:30
переходит выполненные Но это всего лишь
00:29:32
тестовый таск Давайте посмотрим что
00:29:35
здесь еще есть интересного
00:29:37
так вот список тасков это видимо какие
00:29:40
они запускались история Да когда
00:29:44
запускались какими аргументами
00:29:46
аргументов там нету
00:29:49
значит брокер
00:29:52
просто rexis адрес брокера Окей
00:29:55
документация Ну сейчас нам это не нужно
00:29:58
код это видимо Исходный код фловера Вот
00:30:02
такая вот довольно
00:30:05
незамысловатая такая программа но очень
00:30:08
полезная и удобная именно для
00:30:11
мониторинга таскав которые мы запускаем
00:30:13
Ну наверное на сегодня хватит В
00:30:16
следующий раз мы создадим уже реальный
00:30:19
какой-то цедре Task в котором будем
00:30:21
запускать некоторые пересчет и таким
00:30:24
образом мы разгрузим наш веб worker и
00:30:27
снимем с него некоторые дополнительные
00:30:29
запросы

Описание:

На этой странице вы можете по ссылке скачать медиафайл «Оптимизация Django. 5 - Celery + Docker» максимально возможного качества БЕЗ каких-либо ограничений на количество загрузок и скорость скачивания.

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Оптимизация Django. 5 - Celery + Docker"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Оптимизация Django. 5 - Celery + Docker" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Оптимизация Django. 5 - Celery + Docker"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Оптимизация Django. 5 - Celery + Docker" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Оптимизация Django. 5 - Celery + Docker"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Оптимизация Django. 5 - Celery + Docker"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.