我遵循 Miguel Grinberg 的优秀 Flask Mega 教程,成功设置了一个包含 Redis 任务队列和 RQ 工作线程的 Flask Web 应用程序,所有这些都在 Docker 容器中。
为了提高任务队列性能,我现在需要使用自己的自定义工作线程,而不是默认的 RQ 工作线程。
不幸的是,我很难理解如何在 docker 中启动自定义工作线程。
要启动默认的 RQ Worker,Flask Mega 教程使用以下方法:使用“venv/bin/rq”覆盖 Docker 入口点,然后提供参数“worker -u redis://redis-server:6379/0 microblog-tasks” ”。
可执行文件名称由 --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 Worker 的帖子,但我没有找到有关如何在部署中实际使用自定义 Worker 的详细信息。
非常感谢你,
罗宾