gpt4 book ai didi

docker - 如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ 工作线程

转载 作者:行者123 更新时间:2023-12-02 18:07:23 27 4
gpt4 key购买 nike

我遵循了 Miguel Grinberg 出色的 Flask Mega 教程,并成功地设置了一个 Flask Web 应用程序,其中包含一个 Redis 任务队列和 RQ 工作线程,所有这些都在 Docker 容器中。

为了提高任务队列性能,我现在需要使用我自己的自定义工作器,而不是默认的 RQ 工作器。

不幸的是,我很难理解我是如何在 docker 中启动自定义 worker 的。

Flask Mega Tutorial 使用“venv/bin/rq”覆盖Docker入口点,然后提供参数“worker -u redis://redis-server:6379/0 microblog-tasks”来启动默认的RQ worker ”。

可执行文件名称与 --entrypoint 标志一起提供,而命令参数在容器镜像名称之后的最后传递。

这是完整的命令 - 只有最后两行与此问题相关。

$ docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=<your-gmail-username> -e MAIL_PASSWORD=<your-gmail-password> \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://microblog:<database-password>@dbserver/microblog \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint venv/bin/rq \
microblog:latest worker -u redis://redis-server:6379/0 microblog-tasks

我有自己的自定义工作程序,代码如下,直接取自 RQ 文档:
#!/usr/bin/env python
import sys
from rq import Connection, Worker

# Preload libraries
import library_that_you_want_preloaded

# Provide queue names to listen to as arguments to this script,
# similar to rq worker
with Connection():
qs = sys.argv[1:] or ['default']

w = Worker(qs)
w.work()

鉴于我的自定义工作器位于“home/dashboard/app/custom_worker.py”的 Docker 容器内,在启动 Docker 容器以使用我的自定义工作器脚本创建 RQ 工作器时,我需要提供哪些命令?到目前为止,我已经尝试了以下方法:
$ docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=<your-gmail-username> -e MAIL_PASSWORD=<your-gmail-password> \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://microblog:<database-password>@dbserver/microblog \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint venv/bin/rq \
microblog:latest /home/dashboard/app/custom_worker.py -u redis://redis-server:6379/0 microblog-tasks

并且...
$ docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=<your-gmail-username> -e MAIL_PASSWORD=<your-gmail-password> \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://microblog:<database-password>@dbserver/microblog \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint /home/dashboard/app \
microblog:latest custom_worker -u redis://redis-server:6379/0 microblog-tasks

任何帮助将不胜感激。网上有很多关于创建自定义 RQ 工作线程的帖子,但我没有找到关于如何在部署中实际使用自定义工作线程的详细信息。

非常感谢你,
罗宾

最佳答案

在文档中可以使用以下命令:
/usr/local/bin/rq worker -w custom_worker.py --path path/to/sourcecode
使用/usr/local/bin/rq worker --help 查看更多选项
文档:
https://python-rq.org/docs/workers/#custom-worker-classes

关于docker - 如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ 工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com