问题标签 [django-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.

0 投票
13 回答
143553 浏览

python - 如何检查 Celery 中的任务状态?

如何检查一项任务是否在 celery 中运行(具体来说,我使用的是 celery-django)?

我已经阅读了文档,并在谷歌上搜索过,但我看不到这样的电话:

我的用例是我有一个用于转码的外部(java)服务。当我发送要转码的文档时,我想检查运行该服务的任务是否正在运行,如果没有,则(重新)启动它。

我相信我正在使用当前的稳定版本 - 2.4。

0 投票
1 回答
12016 浏览

celery - 芹菜:每个任务的并发限制(每个任务的工人数)?

是否可以在Celery的每个任务级别上设置并发(同时工作的人数)?我正在寻找更细粒度的东西CELERYD_CONCURRENCY(为整个守护进程设置并发)。

使用场景是:我有一个 celerlyd 运行不同类型的任务,具有非常不同的性能特征 - 有些很快,有些非常慢。对于一些人来说,我想尽可能快地做尽可能多的事情,对于其他人来说,我想确保任何时候只有一个实例在运行(即并发 1)。

0 投票
2 回答
6445 浏览

python - Celery 和 Redis 后端的问题

我目前设置了一个系统,它使用带有 redis 后端的 celery 来执行一堆异步任务,例如发送电子邮件、提取社交数据、爬行等。一切都很好,但我正在研究如何监控系统(也就是排队消息的数量)。我开始浏览 celery 源,但我想我会在这里发布我的问题:首先,这是我的配置:


我要做的第一件事是监控队列中有多少消息。我假设,在幕后,redis 后端只是从列表中推送/弹出,尽管我似乎无法在代码中找到它。所以我模拟了一个模拟,我开始了大约 100 个任务并试图在 redis 中找到它们:我的 celeryd 运行如下: python manage.py celeryd -c 4 --loglevel=DEBUG -n XXXXX --logfile=logs/ celery.log 所以我一次应该只有 4 个并发工作者.....有两件事我不明白: 问题 1:在我排队 100 个任务后,在 redis 上查找它们,我只看到以下内容:

我似乎找不到任务来获得排队的数量(从技术上讲,应该是 96,因为我只支持 4 个并发任务)

问题 2

如果有人可以为我解释这一点,那就太好了。

0 投票
5 回答
35414 浏览

python - 使用类方法作为 celery 任务

我正在尝试将类的方法用作 django-celery 任务,并使用 @task 装饰器对其进行标记。Anand Jeyahar提出了同样的情况。是这样的

问题是即使我像这样使用a.foo.delay(bar)它所说的类实例,也foo需要至少两个参数,这意味着self指针丢失。

更多信息:

  • 由于继承,我无法将类转换为模块
  • 方法强烈依赖于类成员,所以我不能让它们成为静态的
  • 使用@task 装饰器将类标记为任务使该类本身成为任务,并且可以从方法执行run()方法,使用一些参数作为方法选择的键,但这并不是我想要的。
  • 创建一个类的实例并将其作为self参数传递给方法会改变我执行方法的方式,而不是像芹菜一样,而是像通常的方法一样(即在测试时)
  • 我试图找出如何从构造函数中动态地注册任务,但是 celery 在工作人员之间共享代码,所以这就是为什么它似乎是不可能的。

谢谢你的帮助!

0 投票
2 回答
867 浏览

django - 无法让 django celeryd 在 Windows 上工作

我有一个 django 项目,运行良好,runserver 位于:

我的 settings.py 和 manage.py 位于上述路径中。

我打开可信赖的 cmd shell,cd 到该目录并运行manage.py celeryd,我得到一个异常并出现以下错误:

很公平。谷歌和 StackOverflow 来救援,我找到了答案。我需要提供--settings=settings给命令。奇怪,因为 runserver 不需要--settings=settings,但这就是生活。我愿意妥协。我继续收到错误消息:

所以我用力地挠了挠头,并决定如果我给这个家伙提供一个不同的 pythonpath,他会很好地放置。我的下一个尝试是:

现在我们到了某个地方!没有错误。但是,与 settings.py 位于同一目录中的 celeryconfig.py 没有得到处理。我的任务都没有加载。我甚至将语法错误放入 celeryconfg.py 以向自己证明它没有被加载。

我做的下一步是使用 django 1.4 中的 manage.py。这个 manage.py 被放置在D:\EverTabs\work\evertabs-website\src\而不是D:\EverTabs\work\evertabs-website\src\evertabs\. 此时,我可以用简单的语法执行 celeryd,而不必添加到 pythonpath 中。尽管如此,我的 celeryconfig.py 仍然保持不变:

进一步的研究表明,如果我将 tasks.py 添加到我的顶级目录 9 中 setting.py 所在的位置)。Celery 会自动发现它们。这已经奏效了。但是,celeryconfig.py 仍然没有被处理,所以我不能在那里做更复杂的配置。目前,这不是问题,因为我的任务终于找到了。但是,celeryconfig.py 没有被处理,这让我非常困扰。

我现在开始意识到,也许现代 celery 毕竟不是在寻找 celeryconfig.py。我可以简单地将这些设置放在我的 settings.py 中,celery 会选择它们。事情开始看起来不错。

0 投票
1 回答
425 浏览

python - 在 django 中运行 celery 不是作为外部进程?

我想试试芹菜。我对一种安排类似 crontab 的任务的简单方法感兴趣,类似于 Spring 的石英。

我从 celery 的文档中看到它需要celeryd作为守护进程运行。有没有办法避免运行另一个外部进程并简单地运行嵌入在我的 django 实例中的这个?由于我目前对分发工作不感兴趣,所以我宁愿保持简单。

0 投票
1 回答
484 浏览

sms - 我可以安排一个芹菜任务在一段时间之间执行吗?

我为一个基于订阅向用户发送短信的组织工作,我的堆栈有 Django、Celery、Redis、RabbitMQ、PostgreSQL、Apache、nginx 和 Kannel。在这种环境下,每个短信服务提供商都有一定的时间可以发送短信。

假设我有一个芹菜任务,它向运营商网络服务发出计费请求,如果计费成功,我必须发送短信,有没有办法安排这个任务在某个时间段之间发送,比如上午 8 点到下午 6 点? 我知道我可以指定一个 eta 和一个过期时间,但是我不希望我的任务过期,因为我必须发送 SMS,所以我会在第二天发送它们

0 投票
1 回答
146 浏览

django - Django-celery 任务由错误的运行实例提供服务

我有一个 Django 应用程序,它使用 django-celery 和 rabbitmq 后端。我们有一台测试机器,其中不同的用户在他们自己的帐户中运行相同的 Django 应用程序(每个都在不同的端口上侦听),但所有人都使用相同的 settings.py 文件,因此使用相同的 rabbitmq 凭据,将 celery 连接到后面-结尾。(请注意,它们每个都为 db 后端使用不同的 sqlite 数据库)。

我刚刚发现我们可能在 django-celery 任务中遇到了“串扰”,用户 A 帐户中 django 应用程序的任务请求可能正在由用户 B 帐户中运行的 celery 任务提供服务。

配置事物以避免此问题的最简单方法是什么?我需要为每个用户创建单独的 rabbitmq 帐户和/或虚拟主机吗?还是有其他方法可以做到这一点?

0 投票
2 回答
22738 浏览

python - 为什么 celery 在执行我的任务时会返回 KeyError?

我不断收到这个keyError。我正在向任务函数发送字符串和 id(整数),所以我认为这不是序列化问题。它还说 keyerror 在函数本身的路径上,而不是在内容上。请帮忙。

任务.py

相关设置

芹菜产量:

[任务]

0 投票
1 回答
906 浏览

django - Django-celery IntegrityError 列名不唯一

我有这个简单的模型,它就像一个 rsync 配置,用于预先填写 celery 定期任务的字段。我第一次通过模型创建新的 rsync 配置时一切正常,并且正在创建新的定期任务而没有问题。当我尝试更改将更改任务参数等任务字段的某些字段时,我得到一个“IntegrityError 列名不是唯一的”我觉得它与模型保存方法有关,但我不确定如何修正它。有人有什么想法吗?

这是模型:

这是 admin.py 表单。