Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使芹菜在docker上自动重新加载_Python_Docker_Celery - Fatal编程技术网

Python 使芹菜在docker上自动重新加载

Python 使芹菜在docker上自动重新加载,python,docker,celery,Python,Docker,Celery,试图在docker上为芹菜添加自动重新加载, 由于我需要开发和测试任务,配置中的更改 我想有自动重新加载选项,而不需要每次重新加载码头工人 在搜索之后我去了watchmedo但它不起作用, 仍然需要在每次更改时重新加载docker 请参见撰写文件: 工人: 建造: dockerfile:dockerfile芹菜 上下文:。 命令:watchmedo auto restart--directory=./--pattern=*.py--recursive--cellery worker--app=w

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

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

请参见撰写文件:

工人:
建造:
dockerfile:dockerfile芹菜
上下文:。
命令:watchmedo auto restart--directory=./--pattern=*.py--recursive--cellery worker--app=worker.cellery--loglevel=info--logfile=logs/cellery.log
卷数:
-./multi/芹菜\应用程序:/usr/src/app
环境:
-芹菜=redis://redisjson:6379
-芹菜=redis://redisjson:6379
取决于:
-Redisson
-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中进行更改,则不重新加载。
我需要重新启动芹菜。

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

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

服务:
redisjson:
图片:redis
端口:#如果不存在,则添加
-9999:6379#您选择第一个数字,第二个数字必须是6379
工人:
#如问题所述,但没有卷:或命令:
然后您可以启动依赖服务,但不能启动工作者本身

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

cd多功能/芹菜应用程序
蟒蛇3-m静脉
. venv/bin/激活
pip安装-r requirements.txt
您还需要使用上面添加的
端口:
将芹菜相关的环境变量设置为指向已发布的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中处理代码,使用实时重新加载工具,等等

主机上,但连接到容器中的基础结构 芹菜工人--app=worker.celery--loglevel=info--logfile=logs/celery.log
你能在Docker外运行这个吗?创建一个Python虚拟环境,确保Redis容器具有
端口:
,以便可以从Compose设置外部访问它,并设置
CELERY\u BROKER\u URL=redis://localhost:6379
;然后你可以让一个芹菜工人从Docker队列中读取任务。@DavidMaze,我不知道你的意思,它与redis有什么关系?芹菜工人生活在一个码头工人,因为我需要有选择,以部署在不同的主机…对不起,我不知道我得到你的意思我按照你的建议,创建一个虚拟环境在ubuntu上,并安装芹菜那里-没有变化,主贴更新的细节。