问题标签 [celeryd]
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 - 了解 celery 任务预取
我刚刚发现了配置选项CELERYD_PREFETCH_MULTIPLIER
(docs)。默认值为 4,但(我相信)我希望预取关闭或尽可能低。我现在将其设置为 1,这与我要查找的内容足够接近,但仍有一些我不明白的地方:
为什么预取是个好主意?我真的没有看到它的原因,除非消息队列和工作人员之间有很多延迟(在我的情况下,它们当前在同一主机上运行,最坏的情况可能最终在相同数据的不同主机上运行中央)。文档只提到了缺点,但没有解释优点是什么。
许多人似乎将其设置为 0,希望能够以这种方式关闭预取(我认为这是一个合理的假设)。但是,0 表示无限预取。为什么有人想要无限制的预取,这不是完全消除了您首先引入任务队列的并发/异步性吗?
为什么不能关闭预取?在大多数情况下,关闭它可能不是一个好主意,但是否有技术上的原因导致这不可能?还是只是没有实施?
有时,此选项连接到
CELERY_ACKS_LATE
. 例如。Roger Hu 写道«[...] 通常 [用户] 真正想要的是让工作人员只保留与子进程一样多的任务。但是,如果不启用延迟确认,这是不可能的 [...]» 我不明白这两个选项是如何连接的,以及为什么没有另一个选项是不可能的。可以在此处找到有关连接的另一个提及。有人可以解释为什么这两个选项是连接的吗?
python - Celery 尝试连接到错误的代理
我有我的芹菜配置
然而,每当我运行 celeryd 时,我都会收到此错误
为什么它没有连接到我设置的 redis 代理,它正在运行 btw?
celery - 将生成的列表映射到芹菜中的任务的最佳方法
我正在寻找一些关于将任务生成的列表映射到芹菜中的另一个任务的最佳方法的建议。
假设我有一个名为 的任务parse
,它解析 PDF 文档并输出页面列表。然后,每个页面都需要单独传递给另一个名为feed
. 这一切都需要进入一个名为process
所以,我可以这样做的一种方法是:
当然,这不是一个好主意,因为我get()
在任务内部调用。
此外,这是低效的,因为我的parse
任务是围绕生成器函数进行的,并且能够产生页面,这意味着应该可以在解析器产生最后一页之前将第一页排队以供馈送。
另一种可能性是这样做:
get()
该示例仍然涉及在任务内部调用。此外,这个例子过于简单化了,我真的需要在所有页面都被输入之后做一些事情(即在 a 中chord
)。
我正在寻找在芹菜中做到这一点的最佳方法。我会很感激任何建议。
谢谢!
multithreading - 我们如何才能看到 Celery 中的线程?
我正在尝试使用--concurrency=1
(基于Workers Guide)在 Celery 中设置不同数量的并发线程。
无论如何,当我运行守护程序 ( celeryd ... --concurrency=1
) 时,我不知道如何查看正在运行的线程数。
它们是否对应于中显示的每一行ps -ef
?
python - Celery Python 日志记录配置仅从指定模块记录 DEBUG
我正在尝试让 django celery 记录(到控制台)来自我的模块(而不是库的模块)的 DEBUG(及更高版本)事件。所以从 celeryd 开始:
将意味着所有 DEBUG 事件都传递给控制台(这是我的根记录器上的处理程序)。我想修改这种行为,以便:
- 来自 mymodule(和孩子)的 DEBUG 事件转到控制台
- 来自所有其他模块的 DEBUG 事件被忽略(例如:转到 Null 处理程序)
- 所有其他事件都正常处理(例如:ERROR 继续转到邮件处理程序)
做这个的最好方式是什么?
python - 无法“重试”在 Celery 中工作
给定一个文件myapp.py
配置了一个celeryconfig.py
我在包含两个文件的目录中调用:
接着
或者
所以try.txt
是用
只有一次。这意味着,重试被忽略了。
我尝试了很多其他的东西:
- 使用 MongoDB 作为代理和后端并检查数据库(奇怪的是,即使在“倒计时”计划的工作中,我也看不到代理“消息”集合中的任何内容)
- 此处的 PING 示例,包括 RabbitMQ 和 MongoDB
- 同时在屏幕上打印
print
(如 PING 示例)和logging
- 在引发强制后,在异常块中进行重试调用
Exception
,引发或返回 retry(),将“throw”参数更改为True
//False
未指定。 - 查看正在发生的事情
celery flower
(其中“经纪人”链接没有显示任何内容)
但没有发生任何工作=/
我的celery report
输出:
上面有什么问题吗?我需要做什么才能使 retry() 方法起作用?
python - /init.d/function + python version
I am trying to daemonize celery and celerybeat. I have downloaded the celeryd and celeybeat files from github and placed them in /etc/init.d/
(celery and celerybeat) with the corresponding config files under /etc/default/
.
My problem is that when I run these two files, celeryd and celerybeat use system python (2.4), and as a result cannot find other installed applications under python 2.7. Python 2.7 is in ~/.bashrc
and /.bash_profile
files, so I do not have any problems running other applications, except when workers fail to work. When I run python ...../manage.py celery
( with all options) everything works like a charm.
Please let me know how I can force /init.d/function
to run python2.7.
I have tried to implement #! /bin/sh python
, but it does not work.
celery - Celery 单任务持久化数据
假设一个任务足以让机器保持几分钟的忙碌状态。
我想得到任务的结果,然后根据结果,让工人再次执行相同的任务。
我找不到答案的问题是:我可以将数据保存在工作机器的内存中以便在下一个任务中使用它吗?
python - Celeryd 启动了太多进程
您如何确保 celeryd 仅作为单个进程运行?当我运行时manage.py celeryd --concurrency=1
,ps aux | grep celery
我看到 3 个实例正在运行:
我注意到 celerybeat 也存在类似问题,它始终作为 2 个进程运行。
python - 如何使用 redis 代理从 celery 中删除任务?
我用 redis 添加了task
一些celery
错误broker
但现在我想删除不正确的task
,我找不到任何方法来做到这一点
是否有一些命令或一些 api 可以做到这一点?