Celery + Django + Docker = Cat Downloader - Demo-project demonstrating the main principles of Celery
HTML-код
- Опубликовано: 29 май 2021
- Help with the development of the channel - / cyber_paddle
A simple project that demonstrates the operation of the Celery distributed task queue and an application implemented using Django/Python.
Source code for the project:
github.com/dvk-net/Celery-Dja... Наука
Огроменное спасибо! Очень мало толковых видео, но вы спасли положение!
огромное спасибо за промощь !!!
спасибо! это как раз то что мне нужно
спасибо за контент! интересно было бы еще про приоритеты очередей узнать, как их реализовывать на практике
спасибо за урок было круто сначала были проблемы но смог 0)
Спасибо большое, контент просто супер, очень сильно помогли
Пожалуйста, приходите еще...
супер инфомативно! спасибо вам!
Пожалуйста!
Лайк просто за превьюху)) Спасибо!
А посмотреть? (ВСЁ И ВСЕ)
Супер, мне понравилось. Только музыка не в тему))) сосредотачиваешься, а тут что то зудит в уши. Смотрел в основном с субтитрами. И шрифт маловат)))) Благодарю, от души.
Большое спасибо! Разобрался наконец.
Пожалуйста! Приходите еще, подписывайтесь, ставьте лайки.
Отличное видео!
Спасибо, подписывайтесь, приходите еще.
спасибо!
Good!
Лучшииииий
Спаибо!
Приходите еще, подписывайтель на канал!
Спасибо, видео очень помогло начать дружбу с Celery!
Вопрос: из каких соображений переименовывали proj в src? Есть какой-то практический смысл?
src = source, т.е. исходный код проекта. Чтобы в репозитории сразу было видно, что это исходный код, а не что-то другое...
thanks for your work! how you connected "def home" to your "main"? and where do the function "home" must be place? thank you
Hi! Thanks for the comment.
I use Django framework in this example, so home func is a view function in django world and I dont need to connect it to the main func.
The entrypoint is /proj/wsgi.py
Привет!
Спасибо за видео!
Можешь делать и с Dramatiq?
Привет!
Не приходилось никогда...
Подскажите, пожалуйста, как перезапускать docker compose так, чтобы он не выстраивал постоянно контейнеры, так как память на windows быстро заполняется. Например, если только изменяю код самого Django приложения, то по идее можно это делать более быстро, запуская только контейнер ?
Просто docker-compose up
Без build...
В общем случае, в Docketfile каждая команда создает "слой", который кешируетс, таким образом то, что изменяется чаще, надо располагать как можно ниже, ибо перестраивается все, что ниже изменившегося.
Есть еше команда docker prune ,чтобы очистить всякие ошметки
Видос крутой, а почему редис работает если в композе порты не были открыты?
Так порты надо указывать если нужен доступ снаружи к контейнеру, а внутри, контейнеры находятся в одной сети и прекрасно имеют доступ.
@@cyber-paddle а точно, спасибо)
появилась ошибка: unable to prepare context: path "./webapp" not found, не могу понять как исправить
,/webapp - относительный путь (относительно текущей папки). Может дело в этом?
Здравствуй, а почему на 12:27 ты написал ./src ./scr? У тебя ведь есть только одна папка src, внутри которой находится proj и manage.py
Я повторял за тобой, кучу ошибок за 2 дня решил и застрял на том, что файл manage.py у меня не открывается
там идет копирование...
в Dokerfile, в строке 5 устанавливаем рабочую директорию внутри образа на время сборки образа как /app - те как-бы делаем cd /app внутри собираемого образа.
Далее в строке 7 копируем файл requirements.txt, лежащий рядом с Dokerfile (т.к ./requirements.txt) в собираемый образ в папку /app (из-за шага в стр 5)
Далее в строке 9 копируем папку с исходным кодом, которая лежит рядом с Dokerfile (т.к ./src) в собираемый образ в папку /app/src (из-за шага в стр 5 и ./src)
те
COPY
Спасибо Я хоть понял как это работает. У меня вопрос а обязательно в воркер джанга и остальное? может ему создавать отдельный докер с нужным для загрузки файла и запуска celary? Меньше памяти будет занимать и быстрее работать)
Можно. Смотря что он делает...
Если это вещь в себе, то можно его там одного разместить...
@@cyber-paddle если я правильно понимаю, то у celery нету доступа к django-orm, можно ли сделать аналог на django managment commands? чтобы он так же делал запросы, получал данные, а потом через django-orm ложил в БД?
Добрый день!
Если как у меня в примере - есть доступ. Там полноценная джанга...
Можно воркер сделать урезанным , тогда - да...
интересно, какого размера образуется контейнер для worker'а? он == объему контейнера основного приложения или всё же меньше его?
Да такой же он...
Можно и вытряхнуть все лишнее, главное, чтобы таски были в нужном месте и все зависимости были в нужном месте...
@@cyber-paddle что значит "вытряхнуть лишнее"? есть к/л "конфигуратор" или надо делать отдельный django project?
Спасибо, познавательно. Интересно было бы узнать, как получить ответ в ту форму, откуда задача запускается. Например, я из формы хочу выполнить действие сразу на двух десятках сетевых устройств, время отклика у которых разное, и результат в виде таблички получить на этой же странице. Можно и не одновременно. Буду признателен за идеи - куда копать/что изучать , чтобы такое реализовать .
Не вдаваясь в подробноссти селери, сходу можно сделать так:
- у каждой задачи есть ID или его можно закинуть прямо при вызове
- задача, когда выполнилась, может сообщить об этом в общедоступное место (редис, БД)
- когда это создано, необходимо опрашивать состояние отправленных задач со сраницы с формой (ajax + rest api..) и менять статус
- либо задача может сделать api call в бекенд и этот кол можно отправить в websocket b можно подхватить в вебформе (websockets, django-channels, rest api...) хотя что-то выглядит сложновато...
- можно создать группу, цепь, и тд из задач и ждать на стороне бекенда завершения всей группы, только после этого отдать ответ пользователю со статусами... docs.celeryproject.org/en/stable/userguide/canvas.html#the-primitives
- так в пред пункте, но ответ дать сразу, а статус выполнения дать сигналом форме по websocket, что все готово...
Ну как-то так....
У кого есть идеи - пишите, можно будет и вмдео сделать на основе...
@@cyber-paddle Может когда-нибудь сделаете что-то подобное и покажете ? Такие вещи никто не показывает. В качестве task, как вариант, функция, которая отдает рандомное число или набор символов/строку c какой-то непостоянной задержкой (рандом в интервале 5-10 секунд). На исходной странице указывается число N, равное количеству запущенных в дальнейшем функций, и кнопка старта, а в итоге на странице появляется N строк, в каждой из которых результат, которой отдал этот экземпляр функции.
дойдут руки - сделаю....
Видео обрабатывается.... Скоро будет...
ВАЖНО:
- Переименовывание папки proj ни в коем случае НЕ делайте через pycharm - refactor - rename.
- Вообще всё собьётся и docker не запуститься. Просто переименуйте в операционной системе.
Автор, делай шрифт побольше, ничего же не видно.
ok (
Много ошибок выскакивает с путями. Запущен докер на виндовс. Собрается и запускается и сразу ошибка
python3: can't open file '/webapp/./src/manage.py': [Errno 2] No such file or directory
docker_celery-worker-1 | Usage: celery [OPTIONS] COMMAND [ARGS]...
docker_celery-worker-1 | Try 'celery --help' for help.
Error: Invalid value for '-A' / '--app':
docker_celery-worker-1 | Unable to load celery application.
docker_celery-worker-1 | The module proj was not found.
Привет!
На счет 1й ошибки - надо посмотреть почему исходный код не попал внутрь контейнера...
А 2я эсто скорее всего из-за использования более новой версии селери. Там изменился порядок вызова...
@@cyber-paddle Хорошо что оперативно ответили. Так и думал. Будем копать