问题标签 [python-rq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
6142 浏览

python - 在 Django 中测试 django-rq ( python-rq ) 的最佳实践

我将开始在我的项目中使用 django-rq。

Django 与 RQ 集成,这是一个基于 Redis 的 Python 队列库。

测试使用 RQ 的 django 应用程序的最佳实践是什么?

例如,如果我想将我的应用程序作为黑盒进行测试,在用户执行一些操作后,我想执行当前队列中的所有作业,然后检查我的数据库中的所有结果。我怎样才能在我的 django-tests 中做到这一点?

0 投票
2 回答
38425 浏览

python - 使用 Celery 与 RQ 的优缺点

目前我正在研究需要实现一些后台作业(主要用于电子邮件发送和大量数据库更新)的python项目。我使用 Redis 作为任务代理。所以在这一点上,我有两个候选人:CeleryRQ。我对这些工作队列有一些经验,但我想请你们分享使用这些工具的经验。所以。

  1. 使用 Celery 与 RQ 的优缺点。
  2. 任何适合使用 Celery 与 RQ 的项目/任务示例。

Celery 看起来很复杂,但它是功能齐全的解决方案。实际上,我认为我不需要所有这些功能。从另一面看,RQ 非常简单(例如配置、集成),但似乎缺少一些有用的功能(例如任务撤销、代码自动重新加载)

0 投票
1 回答
1565 浏览

python - redis redis.client rq 队列 job.result # => None

我试图弄清楚 rq 使用 redis 排队。我有简单的 test_job 函数,我想在队列中使用它。

脚本主要取自 rq 文档:

问题是我没有离开while循环。job.result 仍然没有。但是,根据日志,redis 连接似乎有效:

0 投票
1 回答
2593 浏览

python - 在 Python-RQ 中减少机器上的工人数量?

在 Python-RQ 中减少机器上工作人员数量的好方法是什么?

根据文档,我需要向机器上的一个工作进程发送一个 SIGINT 或 SIGTERM 命令:

打倒工人

如果在任何时候,worker 收到SIGINT(via Ctrl+C) 或SIGTERM(via kill),worker 会等到当前运行的任务完成,停止工作循环并优雅地注册自己的死亡。

如果在此删除阶段SIGINTSIGTERM再次收到,worker 将强制终止子进程(发送它SIGKILL),但仍会尝试注册自己的死亡。

这似乎意味着大量的编码开销:

  • 需要跟踪工作进程的 PID
  • 需要有一种从远程机器发送 SIGINT 命令的方法

我真的需要自定义构建这个吗,或者有没有办法使用 Python-RQ 库或其他一些现有的库轻松地做到这一点?

0 投票
1 回答
2165 浏览

python - Python RQ 的作业推送性能不理想

尝试使用python-rq支持我们的 Web 应用程序的后端,但推送新作业需要很长时间 - 最多 12 秒。

执行enqueue_call函数调用时会发生性能下降,特别是当连接到系统的工作进程数量增加(超过 200 个)时。

系统工作如下:

  1. 前端将作业推送到任务队列服务器。enqueue_call除了要执行的函数的实际参数之外,这还使用函数将参数传递给作业(例如超时和 ttl)。
  2. 多个进程(分布在多台机器上)正在运行工作人员,每个工作人员都在 UNIX 下screen。工作人员遵循文档中提供的模式,执行Worker.work()无限循环函数来监听队列。
  3. 在处理过程中,一些任务会产生新的任务,通常在它们正在运行的同一个队列中。

关于基础设施:

  • 运行此任务队列的 Redis 服务器专用于它。此外,持久性被禁用。它在 4 GB Rackspace 服务器上运行。
  • 在带有任务队列的服务器上运行redis-benchmark时,大多数基准测试的平均结果超过 20000 r/s。

在这种情况下,我们如何提高新工作的推送性能?我们应该使用更好的模式吗?

0 投票
1 回答
1344 浏览

python - 使用 Python-RQ 检查之前的结果是否已经存在

我正在使用Python-RQ创建一个工作,当你创建一个工作时你会得到一个 job.id:

f311ae30-b623-4b38-9dcb-0edd0133a6e6

然后我用那个id来检查结果是否完成,这很好。

然后将此结果缓存(500 秒)。

现在,这就是我感到困惑的地方。

当另一个请求在 500 秒的时间范围内以相同的输入集出现时:

如何取回该作业的缓存结果与创建另一个作业。

我的问题是 job.id 是一些哈希,包括时间戳等,所以我不确定如何在 redis 中查找结果。

我到处搜索过,但没有在任何地方看到此文档,以便在不创建新作业的情况下利用缓存结果的最佳方式。

0 投票
2 回答
5538 浏览

python - 取消 Python RQ 中已经执行的任务?

我正在使用http://python-rq.org/在 Heroku 工作人员测功机上排队和执行任务。这些是长时间运行的任务,有时我需要在执行过程中取消它们。我如何从 Python 中做到这一点?

稍后在一个单独的过程中我想做:

谢谢!

0 投票
1 回答
7525 浏览

django - Django python-rq -- DatabaseError SSL错误:解密失败或坏记录mac

我正在使用 django-redis 和 django_rq 框架来支持我在 Heroku 上的 Django 应用程序的 redis 缓存和 redis 后台任务处理。过去它运行得很顺利,但是现在我DatabaseError SSL error: decryption failed or bad record mac每次运行我的一项工作时都会得到一个。

我在https://devcenter.heroku.com/articles/postgres-logs-errors文章中读到 Postgres 经常发生此错误 ,但它并没有真正为我的 python 设置提供任何有用的东西。

0 投票
4 回答
6824 浏览

django - 如何从队列中清除 Django RQ 作业?

我觉得问起来有点愚蠢,但它似乎不在RQ 的文档中。我有一个包含数千个项目的“失败”队列,我想使用 Django 管理界面清除它。管理界面列出了它们并允许我单独删除和重新排队它们,但我不敢相信我必须潜入 django shell 才能批量执行。

我错过了什么?

0 投票
1 回答
2361 浏览

python - python rq队列导入错误

我正在使用 python v2.7.3 - 通过 easy_install 安装了 python-rq。在尝试使用http://python-rq.org/中给出的步骤创建 RQ 队列时。它失败了,像这样的消息

这里有什么问题以及如何解决这个问题?