问题标签 [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-2.7 - python-rq worker 自动关闭
我正在实现 python-rq 以在队列中传递域并使用 Beautiful Soup 抓取它。所以我正在运行多个工人来完成工作。到目前为止,我启动了 22 个工作人员,所有 22 个工作人员都在 rq 仪表板中注册。但是一段时间后,工作人员会自行停止并且不会显示在仪表板中。但在 webmin 中,它会将所有工作人员显示为正在运行。爬行的速度也降低了,即工人没有跑步。我尝试使用主管和 nohup 运行工作人员。在这两种情况下,工人都会自行停止。
这是什么原因?为什么工人会自己停下来?我们可以在单个服务器中启动多少个工作人员?
除此之外,每当一个工作人员从 rq 仪表板中注销时,失败的计数就会增加。我不明白为什么?
请帮我解决一下这个。谢谢你
python-3.x - python-rq 作业没有超时
有没有办法为工作人员指定“最大”= inf 超时?我有一些长期运行的任务,如果由于超时而失败,我会在工作人员内部处理它。
可以通过cli指定吗?
python - RQ Timeout 不会杀死多线程作业
我在使用 python RQ 运行多线程任务时遇到问题(在 v0.5.6 和 v0.6.0 上测试)。
考虑以下代码,作为我想要实现的简化版本:
东西.py
主文件
执行时main.py
(当 rqworker 在后台运行时),作业在 5 秒内按超时中断。
问题是,当我设置一个包含线程/s 的任务时MyThing().hello_task
,线程永远运行,当 5 秒超时结束时没有任何反应。
如何使用 RQ 运行多线程任务,这样超时会杀死任务、它的儿子、孙子和他们的妻子?
python - 使用 python-rq 配置为每分钟仅执行 30 个任务
我正在构建一个分布式爬虫机制,并希望确保一分钟内向服务器发出的请求不超过 30 个。每个入队的任务都会发出一个请求。
所有任务都在 redis 中入队,并使用python-rq提供的 api 出队。
方法是在redis中设置一个每分钟过期的key,用来保存发送的请求数。
每次有工作可用时,检查发送的请求是否 < 30 - 如果没有,则只需休眠一分钟 - 如果是,则工作
以下是我的自定义工作者:
这似乎不起作用,因为尽管工作人员以通常的速度执行任务,而且设置的键的值也不会更新超过 3。
我有一种强烈的感觉,我的思维过程是有缺陷的。我在这里做错了什么?
谢谢
python - 在应用程序启动时运行 python-rq 工作进程
我在 Heroku 上托管了我的 Django 应用程序,但由于一些限制,我从 Heroku 转移到了基于云的服务器。我按照本教程在 Python 中运行后台任务。一切都运行良好,除了我必须手动运行python worker.py
才能启动工作进程。
在 Heroku 上,我们可以在应用程序启动时使用 Procfile 来运行进程,但现在我在运行 ubuntu 14.04 的基于云的服务器上。那么 Procfile 的替代方案是什么?
工人.py
python - 无法从工作人员访问文件,但在视图中工作 - [Errno 2] 没有这样的文件或目录
我已按照https://devcenter.heroku.com/articles/python-rq上的教程进行操作
假设我有一个函数可以将 PDF 文件转换为 JPG 并将它们存储在应用程序的 tmp/file/ 中,然后将其上传到 S3。
但是,由于 Heroku 上的请求超时时间为 30 秒,我无法将其放入视图中,因此我决定使用后台工作人员来执行任务。因此,我将代码移至任务中,但工作人员无法找到正确的路径。
[Errno 2] No such file or directory
. 我尝试打印没有运气,但我可以在函数中打印。
我尝试调用的函数在任务中给出了一个空字符串,但在视图中给出了正确的值是sorted(os.listdir('tmp/file/')
我四处搜索并认为可能 PYTHONPATH 变量可能是错误的,但一切都通过 manage.py
我的 worker.py 看起来像这样。
我的 manage.py 看起来像这样。
python - Python Flask:由于环境变量,RQ Worker 引发 KeyError
我正在尝试设置一个 redis 队列和一个工作人员来使用我的烧瓶应用程序处理队列。我正在实现这个来处理发送电子邮件的任务。我有点困惑,因为堆栈跟踪似乎在说我的“APP_SETTINGS”环境变量实际上没有设置。
在启动应用程序、redis 或 worker 之前,我设置了 APP_SETTINGS:
但是,当一个项目被添加到队列中时,堆栈跟踪如下:
电子邮件.py
工人.py
我真的很感激另一组对此的看法。我一生都无法弄清楚这里发生了什么。
asynchronous - 异步运行永远不会同时运行的任务
我想知道是否有一种异步运行任务的方法将在后台运行(例如使用 Celery),它永远不会同时运行?
这意味着,每个任务都可以与自己同时运行,但不能与干扰第一个任务操作的其他任务一起运行。
例如,
- 任务 A:从文件中读取(可以与其自身同时运行(与其他从文件中读取的任务)
- 任务 B:写入文件(不应与读取任务(与任务 A)同时运行)
本质上,我需要的是让任务 A 和 B 找出另一个任务是否正在运行以及是否正在运行的方法,然后自行延迟并等待它完成(可能会阻塞任务队列)
为任务定义队列是否可以解决问题?或者它只是一个用于执行任务的队列(因此它将执行队列中的第二个任务而不等待第一个任务的结果)?
在这里使用锁是我唯一的解决方案吗?
如果锁定解决方案是唯一的,那么正确的实现方法是什么?
我发现了这一点:
确保一次只执行一个任务
但它使用 django 的缓存作为锁,我没有在 django 环境中运行我的程序,所以它对我不起作用。
python - 如何从代码中读取失败队列(rq)的回溯?
我在失败的队列中有 1 个失败的作业。
正如@Byron Ruth回答的那样,我可以这样得到这个数字:
在 rq-dashboard 上,我看到了回溯:
如何使用 Python 代码获取此回溯?如果这是不可能的,任何程序化的解决方案都是可以接受的(例如通过 Bash)。
python - 从 Python-RQ / Redis 中删除队列
我正在使用 Python RQ(由 Redis 支持)将任务提供给一堆工作进程。
在将作业添加到队列时,我不小心发送了一个元组,所以现在我有这样的队列:
我似乎无法弄清楚如何摆脱('low',)
队列。由于其名称,队列似乎也引起了一些问题(例如,我无法在 rq-dashboard 中查看或清除它,因为页面将拒绝加载)。
这里有一些讨论:RQ - Empty & Delete Queues,但这仅涉及清空队列。我可以在 Python 中很好地清空队列,但我似乎无法真正从 Redis 服务器中删除队列。
RQ 文档似乎没有提供有关摆脱您不想要的队列的任何信息。
我想实际删除该队列(不仅仅是清空它),而不是永远携带它。