把芹菜放在码头上

2024-04-18 03:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

试图在docker上为芹菜添加自动重新加载, 由于我需要开发和测试任务,配置中的更改 我想有自动重新加载选项,而不需要每次重新加载码头工人

在搜索之后我去了watchmedo但它不起作用, 仍然需要在每次更改时重新加载docker

请参见撰写文件:

worker:
  build:
    dockerfile: DockerfileCelery
    context: .
  command: watchmedo auto-restart --directory=./ --pattern=*.py --recursive -- celery worker --app=worker.celery --loglevel=info --logfile=logs/celery.log
  volumes:
     - ./multi/celery_app:/usr/src/app
  environment:
     - CELERY_BROKER_URL=redis://redisjson:6379
     - CELERY_RESULT_BACKEND=redis://redisjson:6379
  depends_on:
    - redisjson
    - ws

非常感谢您的帮助

########################################## ##########################################

更新:

仍然不起作用

我运行一个虚拟环境(Ubuntu)

cellery.py

from decouple import AutoConfig

cwd = os.getcwd()
DOTENV_FILE = cwd + '/proj/config/.env'


config = AutoConfig(search_path='DOTENV_FILE')

app = Celery('proj',
             broker=config('CELERY_BROKER_URL'),
             backend=config('CELERY_RESULT_BACKEND'),
             include=['proj.tasks'])


app.conf.update(
    result_expires=3600,
)


if __name__ == '__main__':
    app.start()

tasks.py

from .celery import app


@app.task
def add(x, y):
    return x + y


将芹菜纺成:

watchmedo auto-restart --directory=proj/ -p '*.py' --recursive --  celery -A proj worker --concurrency=1 --loglevel=INFO

它正在运行,工作人员正在处理任务。 但是,如果在tasks.py中进行更改,则不重新加载。 我需要重启芹菜


Tags: dockerpyconfigappautodirectorytaskscelery
1条回答
网友
1楼 · 发布于 2024-04-18 03:15:24

即使您最终使用Docker Compose部署应用程序,也不必将其用于开发,您可以使用更方便的环境进行日常开发工作

芹菜将其作业存储在Redis实例中。如果您在Docker之外进行开发工作,则需要确保可以从主机访问Redis实例。相反,您不需要替换标准worker的代码或命令(我们现在不运行它)

services:
  redisjson:
    image: redis
    ports:        # add if not present
      - 9999:6379 # you choose first number, second number must be 6379
  worker:
    # as in the question, but without volumes: or command:

然后您可以启动依赖服务,但不能启动工作者本身

docker-compose up -d redisjson db

在主机系统上,创建一个普通的Python虚拟环境(如果您还没有)。(有各种工具来管理这些,我使用低级工具作为示例。)

cd multi/celery_app
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt

您还需要使用上面添加的ports:将芹菜相关的环境变量设置为指向已发布的Redis

# use the same number you chose for `ports:`
export CELERY_BROKER_URL=redis://localhost:9999
export CELERY_RESULT_BACKEND=redis://localhost:9999

现在,您应该能够直接运行worker,将调试器附加到它,在IDE中处理代码,使用实时重新加载工具,等等

# on the host, but connecting to infrastructure in containers
celery worker  app=worker.celery  loglevel=info  logfile=logs/celery.log

相关问题 更多 >