问题标签 [django-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 投票
2 回答
1523 浏览

python - 当 results_ttl=0 时,Redis 仍然会填满,为什么?

问题:如果作业的结果立即丢弃,为什么redis会填满?

我使用 redis 作为队列来异步创建 PDF,然后将结果保存到我的数据库中。由于它已保存,我不需要在以后访问该对象,因此我不需要在处理结果后将结果存储在 Redis 中。

为了防止结果留在redis中,我将其设置TTL0

问题是尽管 redis 工作人员说作业立即到期:

Redis 仍然填满并抛出:

如果作业结果尚未存储,我是否需要在 redis / django-rq 中设置另一个参数以防止 redis 被填满?


更新:

在这篇文章之后,我预计内存可能会因为 redis 中的失败作业而被填满。

使用此代码段:

这是 redis 中密钥转储的粘贴箱:

http://pastebin.com/Bc4bRyRR

太长了,不实用在这里发帖。它的大小似乎支持我的理论。但是使用:

不会像我期望的那样清除redis。如何更准确地转储 redis 中的键?我是否正确清除作业?

0 投票
2 回答
1864 浏览

python - 当多个工人完成一个未知大小的工作时如何得到通知?

我正在尝试使用django-rq在 Python 中创建一个网站爬虫。到目前为止,我的工人看起来像这样:

  1. 从队列中获取下一页。
  2. 在数据库中创建页面记录。设置status=1
  3. 下载页面内容和过程。可能需要一分钟左右。
  4. 对于页面中的每个链接
    1. 检查链接是否已在数据库中注册。
    2. 如果没有,创建一个新的页面记录。设置status=0链接并将其添加到队列中。
  5. for循环结束后,检查status=0的页数是否为0,如果是,则工作完成。

status=1表示页面已处理。status=0表示该页面尚未处理。

现在,这个算法对一个工人来说工作得很好。但是,当有更多工人时不会这样做,因为有时会比应有的时间更早地触发工作程序的结束。

实施这个工人的正确方法是什么?

0 投票
0 回答
353 浏览

python - 从工作函数中更新 python-rq 任务

我正在运行 python-rq 任务,这可能需要几分钟到几小时,具体取决于输入数据。

我可以通过以下方式在作业调度中设置固定超时:

当超时几乎到期时,是否可以从正在运行的任务中延长 python-rq 任务?例如,当超时为 3600 秒且任务运行 3500 秒时?

在 worker 上运行的 python 函数对 c++ 二进制文件进行子进程调用,并将其进度报告给 redis 键,因此理论上它也可以延长该循环中的工作,但我不知道该怎么做。

0 投票
2 回答
1490 浏览

django - 自定义 Django 信号不起作用

我意识到还有许多其他与自定义 django 信号相关的问题不起作用,相信我,我已经阅读了所有这些问题,但没有运气让我的个人情况正常工作。

这是交易:我正在使用 django-rq 来管理由特定 http 请求触发的冗长后台进程。当该后台进程完成后,我希望它触发一个自定义 Django 信号,以便可以检查 django-rq 是否存在任何作业失败/异常。

INSTALLED_APPS 列表中的两个应用程序处于同一级别。app1里面有一个文件: signals.py

还有一个文件jobs.py

然后在 app2 内部,在views.py中

我没有得到任何反馈,我完全不知所措。我确实知道jobs.py正在执行,因此应该触发信号的代码块也正在执行,因为它位于finally块中(不,try实际上不是空的-我只是把pass放在那里为简单起见)请随时询问更多信息 - 我会尽快回复。

0 投票
2 回答
1029 浏览

python - 如何在 django-rq enqueue 中传递非必要的内置对象作为参数

更新:我发现我什至不能通过一个类enqueue,这可能吗?


我想传递一个item对象(Django中的一个模型)作为参数queue.enqueue(grabber.parse_body, item),但是rqworker会引发这个异常(一旦我尝试将项目作为参数传递,不管我是否使用它):

文件“/usr/local/lib/python3.4/dist-packages/rq/job.py”,第 53 行,在 unpickle 中引发 UnpickleError('Could not unpickle.', pickled_string, e) rq.exceptions.UnpickleError: ( 'Could not unpickle.', ImproperlyConfigured('请求设置 INSTALLED_APPS,但设置未配置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。',))

好像parse_body不知道item是什么?

我知道我可以将项目的 id 作为参数传递,然后处理 id in parse_body,但这可以item直接使用 inparse_body吗?


我的主要代码:(enqueue.py并且grabber.py是独立脚本,不在 Django 应用程序中。)

入队.py

抓取器.py

0 投票
1 回答
548 浏览

python - 使用 django-rq 的异步实例方法

我需要一种使用 django-rq 异步调度实例方法的方法。我试过这个:

由于该函数在模块级命名空间中不可用,因此在 AttributeError 上失败。

任何人都知道解决此问题的好方法,而无需在模块级别编写传递函数来实例化对象然后调用该方法?这就是我一直在做的,但它看起来很笨拙。

0 投票
3 回答
126 浏览

django - 放置独立脚本并使用 django_rq

我需要创建一个独立的脚本来访问数据库,从表中获取数据并对其进行处理并将其存储到另一个表中。我也在使用 django-rq 来运行这个脚本。

  1. 应该将此脚本放在 django 项目结构中的什么位置?
  2. 如果不使用views.py,我应该如何使用django-rq 运行这个脚本?
0 投票
1 回答
376 浏览

django - 如何设置 Haystack 的 QueuedSignalProcessor 以使用 Redis?

我有一个项目,我想从使用 Haystack 的 queued_search 库迁移,使用 Redis 作为 Queue 后端。在此之前,Haystack 和 Django 一切正常,我只是在更改信号处理器时遇到了麻烦。

我的理解是这实际上需要几层代码:

  • Redis :: 这是数据存储
  • RQ :: 这是使用 Redis实现的队列 ( https://code.google.com/p/queues/ )
  • django-rq :: 这是 RQ 的 Django 包装器,我可以在其中指定连接设置
  • queued_search :: 这是 Haystack 信号处理库。这会寻找一个通用的 QUEUE_BACKEND,它被设置为 'rq'。

1)我在本地安装了Redis。它似乎在游泳:

2) 我已经安装了 RQ、django-rq 和 queued_search

3) 在我的 settings.py 文件中,我已将 queued_search 和 django_rq 添加到已安装的应用程序中,并更改了 haystack 信号处理器设置:

4) 在我的 settings.py 文件中,我已将 QUEUE_BACKEND 设置为“rq”。queued_search 应用程序需要定义一个 QUEUE_BACKEND:

4) 在我的 settings.py 文件中,我添加了 RQ_QUEUES 设置,并为 queued_search 设置了一个名为“haystack_search_queue”的索引:

5)我已将 django_rq 添加到 urls.py:

但是当我尝试保存对象时,我在 rq/connections.py 第 70 行中不断收到此错误:

有这么多活动部件,我找不到任何关于如何端到端设置的文档。我错过了一个步骤还是有太多步骤?有没有更简单的方法来设置 QueuedSignalProcessor?

0 投票
8 回答
4378 浏览

python - RQ AttributeError:“模块”对象没有属性

我正在尝试使用 RQ 创建后台作业:

我一直收到这个错误,似乎我在做一些愚蠢的事情?

'

0 投票
1 回答
741 浏览

python - 将 Django-RQ 异常发送到 Sentry

我在 Heroku 应用程序中使用 Django-RQ 来处理后台任务。

当我的后台任务中发生错误时,它不会发送到 Sentry。

我在 settings.py 中的日志记录设置如下:

感谢任何关于我做错了什么的提示。