[英]When running Celery with Django's manage.py command, it returns a strange error
[英]How to run django's “python manage.py runserver” , celery's “celery -A app_name worker -l info” and redis-server in one command
我最近開始使用 Django。 我開始做一個小項目。 我一直在使用 celery 和 redis worker。 每次使用 celery 和 redis 我都必須運行 celery 和 redis 服務器,然后運行 django 服務器。 這是一個有點冗長的過程。 我有兩個問題。 1. 我每次都運行服務器是在做正確的事情,還是有其他正確的方法來處理這個過程? 2. 如果我的方向是正確的,有什么方法可以做到這一點嗎?
我試過 circus.ini ,但沒有用。
如果您使用 UNIX 系統:
&
命令。redis-server & celery -A app_name worker -l info & python manage.py runserver
這種方法的缺點 - 即使在django 開發服務器關閉后, redis和celery仍將在后台工作。 所以你需要終止這些進程。 有關如何執行此操作的示例,請參閱此 unix se 答案。
因此,您可以創建 2 個 bash 腳本start.sh
(包含帶有&
命令)和cleanup.sh
(終止進程)並分別運行它們。
生產見目的#2
根據Yevhenii M.的回答,您可以啟動一個帶有trap
的子 shell 命令,當您按下Ctrl + C時,可以終止該子shell 中的所有正在運行的進程:
(trap "kill 0" SIGINT; redis-server & celery -A app_name worker -l info & python manage.py runserver)
或者作為更易讀的多行命令:
(
trap "kill 0" SIGINT
redis-server &
celery -A app_name worker -l info &
python manage.py runserver
)
另一種選擇是使用 Procfile 管理器,但這需要安裝額外的依賴項/程序。 類似於工頭或其他語言的端口之一:
(來源:foreman 的 README)
為此,您創建一個Procfile
(項目根目錄中的文件),您可以在其中指定要運行的命令:
redis: redis-server
worker: celery -A app_name worker
web: python manage.py runserver
然后運行foreman start
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.