问题标签 [celery-task]

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.

0 投票
3 回答
21957 浏览

celery - 如何使芹菜任务从任务中失败?

在某些情况下,我想让 celery 任务在该任务中失败。我尝试了以下方法:

但是,该任务仍然报告已成功:

任务sim.tasks.run_simulation[9235e3a7-c6d2-4219-bbc7-acf65c816e65] 1.17847704887s成功:False

似乎只能在任务运行时修改状态并且一旦完成 - 芹菜将状态更改为它认为是结果的任何内容(请参阅this question)。有什么方法可以在不通过引发异常而使任务失败的情况下使 celery 返回任务失败的情况?

0 投票
1 回答
4387 浏览

python - 芹菜工人变量共享问题

我在一个项目中使用 Python 和celery 。在项目中,我有两个文件:

芹菜配置文件

example.py

celeryconfig.py中,我将CELERYD_CONCURRENCY设置为2,这意味着它将我的任务队列中的任务分配给2 个不同的进程。

从 Python 控制台,我运行:

这将创建两个由两个工作人员同时执行的任务。问题是,由于两个工作进程都运行它们的任务函数 [ getDigest() ],它们似乎使用相同的哈希对象 ( md5 )。celeryd的输出证实了这一点,如下所示。

为了简单起见,我使用的是hashlib的md5对象,但是在我的实际项目中,我使用的是一个不能被多个进程访问和修改的对象。这预计会使工人崩溃。

这就提出了一个问题:如何修改我的代码以使工作进程初始化并使用它们自己的 ( md5 ) 对象?现在,他们共享同一个对象——导致我的应用程序崩溃。这可能吗?

0 投票
1 回答
869 浏览

heroku - 芹菜任务状态不更新

我看到一个使用 Celery 作为任务队列的 Django 应用程序存在一个奇怪的问题:

  1. 我开始一个任务。
  2. 在执行期间,任务调用 update_state(...) 来设置任务状态以指示进度。
  3. 任务完成。我通过日志验证了这一点。

但是,此视图 (http://myapp/tasks/37d9a3ac-5bd2-4791-9729-2234ff3be762/status) 在任务完成后的一段时间内返回一个 STALE 结果。我可以使用 Redis 和数据库作为后端来重现这个。最终任务状态正确返回,但这确实破坏了我的应用程序,因为 UI 会在用户执行任何操作之前轮询任务是否已完成。

编辑:我的应用程序部署在 Heroku 上。我想知道 Cedar 是否有任何响应缓存?

知道发生了什么吗?

0 投票
2 回答
845 浏览

django - 重置芹菜任务的倒计时

我需要在倒计时后运行芹菜任务,但能够在某些条件下重置倒计时。例如,我想用 调用apply_asynccountdown=15但如果某个事件在任务执行之前发生,我想再次将该倒计时设置为 15 秒。

从文档和谷歌搜索中,我认为我可以通过保存任务 ID 来完成此操作,然后在事件发生时撤销并重新创建任务。我想知道是否有更优雅的方法。

0 投票
1 回答
6012 浏览

python - python celery max-tasks-per-child-setting default

我正在使用 celery,并且我想使用max-tasks-per-child-setting 因为某些 celery 进程会占用大量内存。

我试图在更改之前找到此设置的默认值,但我找不到该信息。

我看了这里,但我不想将其设置为,1因为我不希望它重新启动每个任务。

0 投票
1 回答
11608 浏览

python - 你在哪里设置芹菜任务的task_id?

我无法找到任何使用我自己的 task_id 设置 task_id 的示例

沿着这些路线的东西......

0 投票
1 回答
933 浏览

django - Celeryd Worker 停止处理任务

我有一个 celeryd 和两个工人一起运行,看着他们我看到他们每个接受 4 个任务,处理它们,然后停止处理任务。(请注意,这些任务运行时间很长,最多需要 2 分钟才能处理)。

celeryctl 提供以下信息:

此外,每次发生这种情况时,要打印到日志的最后一件事是:

这些任务也恰好在打印之前失败了,在我的代码中,我调用的是:

如果我杀死 celeryd (^C,它立即死亡,无需等待任务)并重新启动它,它会继续,就像其他一些任务没有发生任何事情并再次死亡(我认为它总是在create_pdf任务中,但日志显示此任务失败并重试没有问题)

0 投票
1 回答
502 浏览

python - 带有返回数据的芹菜任务:做错了还是做对了?

我正在学习使用芹菜。我有一个函数(在 Flask 应用程序中),从我到目前为止所学到的有点伪代码中:

我不是 100% 确定这是正确和最好的,但现在对我有用。似乎结果/返回的行可能是一个“返回 = run_task”,其中运行任务执行任务并等待。

我正在考虑重构方向——a)将这两行(结果/返回)捆绑在一个运行任务并调用结果的函数中,或者 b)将“AsyncResult”放入任务本身并返回。

以前做过这件事的人的芹菜方法是什么?或者只是来自以前微调过芹菜的人的一些反馈。

0 投票
1 回答
365 浏览

python - 使用 Celery 2.6.0rc5 时发生 TypeError

我正在使用Celery 2.6.0rc5,并收到以下错误:

刚才从 git 中提取了 kombu 和 celeryredis-server ,并在安装了 (2:2.2.12-1build1) 作为代理的 Ubuntu 12.04 LTS 上进行了尝试。

我的配置(celeryconfig.py)是:

我的工人 ( worker.py) 是:

当我使用 运行worker 时$ ./worker.py worker,我从python shell 调用worker 如下:

工人报告上述错误,报告一个更长的错误,最终以工人退出以下情况结束:

顺便说一句,当我运行$ ./worker.py shell并运行“import kombu;kombu.version 时,它会报告 2.2.2,据我所知是最新版本。可能还值得注意的是,其他人遇到了这个问题,但似乎通过更新 kombu 解决了这个问题。

因为这真的是我能想象到的最简单的 celery 项目,我对 celery 完全陌生,而且这是一个开发版本,我有点不知道从哪里开始,如果有任何帮助,我将不胜感激。

感谢您的阅读。

0 投票
2 回答
6808 浏览

celery - 重试属于链的 celery 失败的任务

我有一个运行一些任务的芹菜链。每个任务都可能失败并重试。请参阅下面的快速示例:

和链条:

运行这两个任务(并假设没有失败),你会得到/看到打印:

但是,当添加任务第一次失败并在随后的重试调用中成功时,链中的其余任务不会运行,即添加任务失败,链中的所有其他任务都不会运行,几秒钟后,添加任务再次运行并成功,链中的其余任务(在本例中为 mul.si(3, 4))不运行。

celery 是否提供了一种方法来从失败的任务中继续失败的链?如果不是,那么完成此任务并确保链的任务以指定的顺序运行并且仅在前一个任务成功执行之后(即使该任务重试几次)的最佳方法是什么?

注1:这个问题可以通过做

但我有兴趣了解为什么链不适用于失败的任务。