问题标签 [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.
python - 如何在 Python 中正确捕获和处理 RQ 超时?
试图找到一种捕捉RQ作业超时的好方法,以便在超时后重新排队。
基本上,正确的解决方案将提供一种方法(例如,worker 中的异常处理程序或类似的东西)来重新排队超时的作业。此外,如果作业返回failed
队列,这也是一个很好的答案。
非常感谢!任何帮助将不胜感激!
python - 如何禁用 Python RQ 作业的 SyntaxWarning?
试图避免让RQmeta
显示关于使用字典进行任意属性使用的警告消息(向控制台) 。我们按照指定使用它,并且警告继续显示。
显示的警告如下:
基本上,这很烦人,因为它会干扰正常的调试活动。
关于如何禁用此功能的任何想法?
python - 如何在 django start 上启动 redis queue worker?
我决定我需要使用异步队列系统。我正在设置 Redis/RQ/django-rq。我想知道如何在我的项目中开始工作。
django-rq 提供了一个很棒的管理命令,它看起来像:
但是当你启动 django 实例时是否可以启动 worker?只是想知道还是我总是必须手动启动?
谢谢。
python-rq - 在 RQ 工作人员中重用实例?
我有一门课可以为我进行复杂的计算。实际计算不会花那么长时间,但获取一个类的实例大约需要一秒钟。(它读入一堆大型数据文件。)
有没有一种方法可以创建此类的实例,然后让我的 RQ 工作人员重新使用它,而不必为我执行的每个作业重新初始化它?
python - 使用 python-rq 在远程服务器上执行长任务
我已经编写了一些需要很长时间才能执行(2-3 天)的代码,我想将它推送到服务器上以便在那里执行。代码中包含大量相互交互的类和函数,但最终整个代码的执行是通过单个函数 (test2) 完成的,这将使其正常工作。我发现对我来说一个解决方案可能是任务队列,因为我不需要同时执行多个任务,我发现 RQ 可能适合我的需要。
我已经在远程服务器上设置了 Reddis。以守护程序模式运行它。比我写了一个简单的模块,它应该把我的 test2 函数放在一个队列中。
然后我遇到了一个问题:在 python-rq 文档网页(http://python-rq.org/docs/workers/)上,所描述的启动工作人员的方法是执行
从壳。但是这个工人不是作为一个守护进程开始的,因此当我连接到这个远程服务器时,我的应用程序是通过 ssh 设置的,如果我的 ssh 连接断开,工人也会断开,这不是我想要的行为具有。在我的代码执行时将 ssh 连接保持 2-3 天,在我的情况下拒绝了除了使用 python-rq 之外的整个逻辑。有没有办法解决这个问题?也许不应该从 shell 启动一个 python-rq worker 来进行守护进程?
python - AttributeError:类型对象“YourClassHere”没有属性“rsplit”
我正在使用django-rq
django 绑定python-rq
来尝试异步生成 PDF。该类TemplateProcesser
使用两个参数进行初始化,并在函数中自动生成 PDF __init__
。这可以在 之外同步正常工作django-rq
,但是django-rq
会因以下错误而失败:
错误:
从这个电话:
关于如何正确包含未实例化的类的任何想法django-rq
?
班级:
堆栈跟踪:
超孔径回答后的回溯:
python - Python RQ:回调模式
我现在有大量文档要处理,并且正在使用 Python RQ 来并行化任务。
我希望在每个文档上执行不同的操作时完成一系列工作。例如:A
-> B
->C
表示将文档传递给 function A
,A
完成后,继续执行B
和 last C
。
然而,Python RQ 似乎并不能很好地支持管道的东西。
这是一个简单但有点脏的做法。总之,流水线中的每个函数都以嵌套方式调用其下一个函数。
例如,对于管道A
-> B
-> C
。
在顶层,一些代码是这样编写的:
q.enqueue(A, the_doc)
其中 q 是Queue
实例,在函数A
中有如下代码:
q.enqueue(B, the_doc)
在 中B
,有这样的东西:
q.enqueue(C, the_doc)
还有比这更优雅的方法吗?例如ONE函数中的一些代码:
q.enqueue(A, the_doc)
q.enqueue(B, the_doc, after = A)
q.enqueue(C, the_doc, after= B)
depends_on参数是最接近我要求的参数,但是,运行类似:
A_job = q.enqueue(A, the_doc)
q.enqueue(B, depends_on=A_job )
不会工作。Asq.enqueue(B, depends_on=A_job )
在执行后立即A_job = q.enqueue(A, the_doc)
执行。当 B 入队时,来自 A 的结果可能还没有准备好,因为它需要时间来处理。
PS:
如果 Python RQ 在这方面不是很擅长,我可以使用 Python 中的其他工具来实现相同的目的:
- 循环并行化
- 管道处理支持
python - RQ - 清空和删除队列
我正在使用RQ,并且我有一个failed
包含数千个项目的队列,以及test
我为测试创建的另一个队列,该队列现在是空的且未使用。我想知道如何从failed
队列中删除所有作业,并完全删除test
队列?
为基本问题道歉,但我在RQ 文档中找不到这方面的信息,而且我对Redis和 RQ都是全新的......提前致谢!
python - 以编程方式销毁/删除 Redis Queue (rq) 中的 Queue()
鉴于:
我想以编程方式删除名为“昨天”的队列
python - 当 results_ttl=0 时,Redis 仍然会填满,为什么?
问题:如果作业的结果立即丢弃,为什么redis会填满?
我使用 redis 作为队列来异步创建 PDF,然后将结果保存到我的数据库中。由于它已保存,我不需要在以后访问该对象,因此我不需要在处理结果后将结果存储在 Redis 中。
为了防止结果留在redis中,我将其设置TTL
为0
:
问题是尽管 redis 工作人员说作业立即到期:
Redis 仍然填满并抛出:
如果作业结果尚未存储,我是否需要在 redis / django-rq 中设置另一个参数以防止 redis 被填满?
更新:
在这篇文章之后,我预计内存可能会因为 redis 中的失败作业而被填满。
使用此代码段:
这是 redis 中密钥转储的粘贴箱:
太长了,不实用在这里发帖。它的大小似乎支持我的理论。但是使用:
不会像我期望的那样清除redis。如何更准确地转储 redis 中的键?我是否正确清除作业?