问题标签 [celery]
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 - 禁用 Celery 的 Django 调试
是否可以仅为 Django 中的特定应用程序设置 DEBUG=False?启用调试时,Celery 存在已知的内存泄漏。我有一个开发服务器,我希望 Celery 作为服务运行,无需调试,因此它不会泄漏内存,但我希望我的 Django 应用程序的其余部分使用调试,以便在测试时显示错误。
django - 从前端使用 AJAX 查询 Celery 以了解创建的任务是否完成的最佳方法?
我正在使用 Django 和 Celery + RabbitMQ 来创建用户上传的视频的视频转换任务。现在我知道如何查询 celery 以获取状态。我的问题是在哪里保存与每个任务关联的 task_id,我应该将它保存在模型中还是 django 的缓存中?
我知道过去曾提出过类似的问题,例如这个 stackoverflow 问题,但还没有明确的答案。我知道这个问题的答案因开发人员的喜好而异,但如果有人可以就不同方法的优缺点进行教育,那就太好了。
只是为了重新迭代,我将使用 task_id 每隔一段时间从前端触发 AJAX 查询,以了解视频转换是否完成。
rabbitmq - 芹菜(Django)速率限制
我正在使用 Celery 处理多个数据挖掘任务。其中一项任务连接到远程服务,该服务允许每个用户最多同时连接 10 个(或者换句话说,它可以在全局范围内超过 10 个连接,但每个作业不能超过 10 个连接)。
我认为 令牌桶(速率限制)是我正在寻找的,但我似乎找不到它的任何实现。
python - 使用 Django-Celery 重试任务 - Django/Celery
我在重试任务时遇到问题,这是测试任务的样子
我找不到任何关于如何重试装饰任务的文档,我发现的只是:
这似乎不适用于我的情况,因为self
该方法没有传递变量。
编辑:
我现在尝试以下方法无济于事:
我收到以下错误:
TypeError("重试的kwargs参数不能为空。任务必须接受**kwargs,见http://bit.ly/cAx3Bg ",)
repository - 基于消息的主从框架(Java/Python/.Net)的经验
我正在设计一个从 10,000 英尺高的分布式主从系统,包括:
- 基于网络的用户界面
- 一个主组件,负责根据一组可配置的算法生成作业
- 在普通电脑、HPC 集群甚至云上运行的一组工作人员
- 一个数字存储库
- 基于消息的中间件
- 不同类别的任务,运行时间从 <1s 到 ~6hrs。任务是计算繁重的,而不是数据/IO 繁重的。预计任务量不会很大(据我现在所见)。大概最高100/分钟左右。
严格来说,没有必要移出 Windows 生态系统,但我会更愿意使用跨平台解决方案来保持选项开放(注意,某些任务仅适用于 Windows)。
我几乎已经将RabbitMQ作为消息传递层,Fedora-commons似乎是最成熟的现成存储库。至于我正在评估的主/从逻辑:
- 基于 Java:Grails + Postgres + DOSGi或带有 Zookeeper的GridGain
- 基于 Python:Django + Postgres + Celery
- 基于 .net:ASP.NET MVC + SQL Server + NServiceBus + Sharepoint 或Zentity作为存储库
我查看了各种 IoC/DI 容器,但怀疑它们是否真的最适合任务执行容器并添加额外的层/复杂性。但也许我错了。
目前我倾向于使用 python 解决方案(保持轻量级),但我会对人们必须分享的任何经验/建议感兴趣,特别是对于 .net 堆栈。开源/可扩展性/弹性功能是加分项。
PS:未来更高级的需求将是用户能够直接连接到正在运行的任务(使用 Web UI)并影响其行为(实时转向)。为此需要一个直接的通信通道(通过 AMQP 执行此操作似乎不是一个好主意)。
django - 停止芹菜的问题
我将 celeryd 作为守护进程运行,但有时无法优雅地停止它。当我发送 TERM 信号并且队列中有项目(在这种情况下service celeryd stop
)时,celeryd 将停止接受新工作,并关闭所有工作进程。但是,父进程不会关闭。
我刚刚遇到了一个场景,我在两台独立的工作机器上运行 celeryd:A 和 B。在 RabbitMQ 服务器上有大约 1000 条消息时,我关闭了 A,并经历了我上面解释过的情况。B 继续工作,但随后因为服务器上留下大约 40 条消息而停滞不前。但是,我能够正确停止 B。
我重新启动了 B,看看它是否会将 40 个项目从队列中取出,但它不会。接下来,我硬杀了A,然后B抓住并完成了任务。
我的结论是父进程已经为它的子进程从我们的 RabbitMQ 服务器中保留了 40 个项目。它会正确地收割孩子,但除非我手动杀死它,否则不会将这些项目释放回 RabbitMQ。
有没有人经历过类似的事情?
我正在运行 Celery 2.2.2
python - 为什么 RabbitMQ 不在持久队列上持久化消息?
我通过 Celery 将 RabbitMQ 与 Django 一起使用。我正在使用最基本的设置:
我导入了一个 Celery 任务并将其排入队列以在一年后运行。从 iPython 外壳:
RabbitMQ 在 celery 队列中收到这条消息:
然后我通过按 control-C 然后按“a”中止来杀死 RabbitMQ。当我再次启动服务器并使用 rabbitmqctl 检查它时,它说 celery 队列中没有消息:
芹菜队列很耐用。为什么消息没有持久化?我需要做什么才能使消息持久化?
python - 使用自定义状态时任务状态未更新
我有这样的任务:
然后我运行这个:
我可以在工作人员中看到任务已完成:
[2011-02-19 20:18:43,851:INFO/MainProcess] 任务 testcelery.test[7598b170-2877-4d76-89a0-9bcc4c9f877e] 在 20.0225799084 秒内成功:“完成”
但是 t.state 永远不会从 PROGRESS 变为 SUCCESS。我究竟做错了什么?
python - 通过 task_id 重试 celery 中的任务
我已经启动了很多任务,但其中一些还没有完成(763 个任务),处于 PENDING 状态,但系统没有处理任何事情......可以重试这个任务,给 celery 任务 ID?