问题标签 [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.
python - 当 results_ttl=0 时,Redis 仍然会填满,为什么?
问题:如果作业的结果立即丢弃,为什么redis会填满?
我使用 redis 作为队列来异步创建 PDF,然后将结果保存到我的数据库中。由于它已保存,我不需要在以后访问该对象,因此我不需要在处理结果后将结果存储在 Redis 中。
为了防止结果留在redis中,我将其设置TTL
为0
:
问题是尽管 redis 工作人员说作业立即到期:
Redis 仍然填满并抛出:
如果作业结果尚未存储,我是否需要在 redis / django-rq 中设置另一个参数以防止 redis 被填满?
更新:
在这篇文章之后,我预计内存可能会因为 redis 中的失败作业而被填满。
使用此代码段:
这是 redis 中密钥转储的粘贴箱:
太长了,不实用在这里发帖。它的大小似乎支持我的理论。但是使用:
不会像我期望的那样清除redis。如何更准确地转储 redis 中的键?我是否正确清除作业?
python - 当多个工人完成一个未知大小的工作时如何得到通知?
我正在尝试使用django-rq在 Python 中创建一个网站爬虫。到目前为止,我的工人看起来像这样:
- 从队列中获取下一页。
- 在数据库中创建页面记录。设置
status=1
。 - 下载页面内容和过程。可能需要一分钟左右。
- 对于页面中的每个链接
- 检查链接是否已在数据库中注册。
- 如果没有,创建一个新的页面记录。设置
status=0
链接并将其添加到队列中。
- for循环结束后,检查status=0的页数是否为0,如果是,则工作完成。
status=1
表示页面已处理。status=0
表示该页面尚未处理。
现在,这个算法对一个工人来说工作得很好。但是,当有更多工人时不会这样做,因为有时会比应有的时间更早地触发工作程序的结束。
实施这个工人的正确方法是什么?
python - 从工作函数中更新 python-rq 任务
我正在运行 python-rq 任务,这可能需要几分钟到几小时,具体取决于输入数据。
我可以通过以下方式在作业调度中设置固定超时:
当超时几乎到期时,是否可以从正在运行的任务中延长 python-rq 任务?例如,当超时为 3600 秒且任务运行 3500 秒时?
在 worker 上运行的 python 函数对 c++ 二进制文件进行子进程调用,并将其进度报告给 redis 键,因此理论上它也可以延长该循环中的工作,但我不知道该怎么做。
django - 自定义 Django 信号不起作用
我意识到还有许多其他与自定义 django 信号相关的问题不起作用,相信我,我已经阅读了所有这些问题,但没有运气让我的个人情况正常工作。
这是交易:我正在使用 django-rq 来管理由特定 http 请求触发的冗长后台进程。当该后台进程完成后,我希望它触发一个自定义 Django 信号,以便可以检查 django-rq 是否存在任何作业失败/异常。
INSTALLED_APPS 列表中的两个应用程序处于同一级别。app1里面有一个文件: signals.py
还有一个文件jobs.py
然后在 app2 内部,在views.py中
我没有得到任何反馈,我完全不知所措。我确实知道jobs.py正在执行,因此应该触发信号的代码块也正在执行,因为它位于finally块中(不,try实际上不是空的-我只是把pass放在那里为简单起见)请随时询问更多信息 - 我会尽快回复。
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
python - 使用 django-rq 的异步实例方法
我需要一种使用 django-rq 异步调度实例方法的方法。我试过这个:
由于该函数在模块级命名空间中不可用,因此在 AttributeError 上失败。
任何人都知道解决此问题的好方法,而无需在模块级别编写传递函数来实例化对象然后调用该方法?这就是我一直在做的,但它看起来很笨拙。
django - 放置独立脚本并使用 django_rq
我需要创建一个独立的脚本来访问数据库,从表中获取数据并对其进行处理并将其存储到另一个表中。我也在使用 django-rq 来运行这个脚本。
- 应该将此脚本放在 django 项目结构中的什么位置?
- 如果不使用views.py,我应该如何使用django-rq 运行这个脚本?
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?
python - RQ AttributeError:“模块”对象没有属性
我正在尝试使用 RQ 创建后台作业:
我一直收到这个错误,似乎我在做一些愚蠢的事情?
'
python - 将 Django-RQ 异常发送到 Sentry
我在 Heroku 应用程序中使用 Django-RQ 来处理后台任务。
当我的后台任务中发生错误时,它不会发送到 Sentry。
我在 settings.py 中的日志记录设置如下:
感谢任何关于我做错了什么的提示。