【发布时间】:2019-07-26 19:48:58
【问题描述】:
我遵循了 Miguel Grinberg 的优秀 Flask Mega 教程,并成功地在 Docker 容器中设置了一个带有 Redis 任务队列和 RQ 工作线程的 Flask Web 应用程序。
为了提高任务队列的性能,我现在需要使用我自己的自定义工作者,而不是默认的 RQ 工作者。
不幸的是,我很难理解如何在 docker 中启动自定义工作者。
为了启动一个默认的 RQ worker,Flask Mega 教程使用了用“venv/bin/rq”覆盖 Docker 入口点然后提供参数“worker -u redis://redis-server:6379/0”的方法微博任务”。
可执行文件名称由 --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()
鉴于我的自定义工作器位于 Docker 容器中的“home/dashboard/app/custom_worker.py”,我需要在启动 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 工作器的帖子,但我没有找到关于如何在部署中实际使用自定义工作器的详细信息。
谢谢你, 罗宾
【问题讨论】:
标签: docker flask redis entry-point python-rq