【问题标题】:How to start a custom RQ worker within a Docker Container (Python, Flask and Redis)如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ 工作者
【发布时间】: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


    【解决方案1】:

    在文档中可以使用以下命令:

    /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

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 2021-06-15
      • 2019-10-25
      • 2017-12-05
      • 2020-10-02
      • 1970-01-01
      • 2020-09-05
      • 2016-12-17
      • 2019-11-13
      相关资源
      最近更新 更多