如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ Worker

2024-03-22

我遵循 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 的详细信息。

非常感谢你, 罗宾


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

/usr/local/bin/rq worker -with custom_worker.py --path 路径/到/源代码

使用 /usr/local/bin/rq worker --help 查看更多选项

Docs: https://python-rq.org/docs/workers/#custom-worker-classes https://python-rq.org/docs/workers/#custom-worker-classes

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ Worker 的相关文章

随机推荐

  • 面临错误问题:在项目输出中找不到指定的 EntryPointExe ''

    我正在使用 VS2022 17 5 3 和 WPF App net7 0 我正在构建一个要在 Microsoft 商店中发布的应用程序 我遇到错误 在项目输出中找不到指定的 EntryPointExe 我搜索了很多导致此错误的原因 但失败了
  • MSCRM Web 服务是否支持数据库事务?

    人们会假设任何基于网络的数据应用程序数据库事务都是设计的一个组成部分 环顾 CrmService 我找不到任何表明事务性 CRUD 可用的信息 MSCRM 是否不支持 实现此功能 如果是 而我错过了 有人可以指出我正确的方向吗 我担心在我编
  • HAX 内核模块未安装

    我刚刚从官方 android 网站下载了最新的 android studio 并安装了它 但我收到此错误 而不是使用 Intel X 86 仿真器加速器 什么可能导致此错误 emulator ERROR x86 emulation curr
  • 发现 Control() 不起作用

    我在按钮单击事件中创建了 5 个文本框 当单击动态生成的按钮时 我必须获取文本框中的值 protected void Button1 Click object sender EventArgs e for int i 0 i lt 5 i
  • 如何在Google colab中访问上传的文件

    我是 python 新手 我使用Google Colab 我上传了一个train data npy进入google Colab 然后我想使用它 根据这个链接如何在 Google Colaboratory 中导入并读取 shelve 或 Nu
  • 如何获得后续观察值(国家年)之间的差异?

    假设我有 5 个国家 地区 10 年内的分数 例如 mydata lt 1 3 mydata lt expand grid country c A B C D E year c 1980 1981 1982 1983 1984 1985 1
  • 在服务器路径写入文件时如何传递凭据?

    我想在服务器路径写入一个文件 但是当我尝试这样做时 我们得到了异常 我们没有权限这样做 我们有一个有权在服务器路径写入的应用程序 ID 和密码 但我不知道如何传递此凭据 我当前的代码 Create a new GUID extract th
  • 是否有符合 .NET FIPS 标准的密钥 SHA256 哈希算法?

    我正在使用 HMACSHA256 和以下代码创建一个密钥 SHA256 哈希 HMACSHA256 hmac new HMACSHA256 Encoding UTF8 GetBytes secretKey byte hash hmac Co
  • 如何使用 z-index 进行相对定位?

    我有一个问题z index和我的代码 我想在每一行上都有一个弹出窗口 相对于该行定位 所以我创建了这段代码 level1 position relative z index 2 level2 position relative z inde
  • .htaccess:此处不允许使用 RewriteEngine

    我将 htaccess 上传到服务器并收到错误 500 内部服务器错误 在错误日志中我有以下错误 htaccess 此处不允许 RewriteEngine But mod rewrite so已启用 那么我需要改变吗
  • Android Textview斜体和wrap_contents

    我正在使用 3 个不同颜色的斜体文本视图
  • 将 Jar 文件与 -classpath JAVA 组合

    我有一个关于编译一个 Jar 文件中有一些依赖类的类的问题 MyJar jar 通过将目录树放入 classpath 选项中 例如 javac cp MyJar MyClass java 是检查所有子目录中的类还是仅检查目录树中的顶级类 提
  • 字节的二进制读取仅返回一个值。 C#

    当我期望 0 1 2 3 时 控制台显示 0 0 0 0 这是以下版本的修改版本 https msdn microsoft com en us library system io binarywriter v vs 110 aspx htt
  • 如何将 QTextTable 中的文本居中

    我正在使用 qt 框架开发应用程序 现在我想将表格数据保存为 pdf 我正在使用 QTextTable 和 QTextDocument 类 但是我无法将单元格中的文本居中 我该怎么做呢 感谢帮助 如果您想在插入文本时进行对齐 可以使用 Al
  • 将 JSON 反序列化为匿名对象

    在 C 中 我通过使用这样的代码成功地将匿名对象序列化为 JSON var obj new Amount 108 Message Hello JavaScriptSerializer serializer new JavaScriptSer
  • Asp.Net MVC - 具有两个相同类型列表的强类型视图

    我有一个强类型化到 Item 类的视图 在我的控制器中 我需要发送两个不同的列表 除了创建一个带有两个 List 的新类之外 还有更简单的方法可以做到这一点吗 我最终想要做的是在我的主页上有 10 个按日期排序的项目 以及 10 个按人气排
  • ReactJS 如何添加显示更多/显示更少按钮

    我是 React 新手 我想向我的应用程序添加一个简单的 显示更多 按钮 我有一个包含数据的数组 我想在其中默认显示 3 个条目 当用户点击show more 应呈现其余数据 并且按钮应将文本更改为show less 我不太确定该怎么做 这
  • 如何确定当前用户位置是否在我的 MKCooperativeRegion 内?

    我有一个坐标区域 我已确定该区域包含我想要为我的应用程序显示的内容的限制 我已将其设置为具有中心点纬度 经度和跨度的 MKCooperativeRegion 如何确定当前 userLocation 是否在我的坐标区域内 使用地图矩形 这是使
  • 检查数组是否包含重复值[重复]

    这个问题在这里已经有答案了 我想编写一个 JavaScript 函数来检查数组是否包含重复值 我编写了以下代码 但其给出的答案始终为 true 谁能告诉我我错过了什么 function checkIfArrayIsUnique myArra
  • 如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ Worker

    我遵循 Miguel Grinberg 的优秀 Flask Mega 教程 成功设置了一个包含 Redis 任务队列和 RQ 工作线程的 Flask Web 应用程序 所有这些都在 Docker 容器中 为了提高任务队列性能 我现在需要使用