问题标签 [celerybeat]

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 投票
1 回答
1061 浏览

django - celerybeat 设置为 crontab(day_of_month=1) 在一个月内多次发送任务

我有这个设置为 crontab(day_of_month=1) 的任务。但是当它执行任务时,它会继续发送任务,该任务应该执行一次。

从我的tasks.py

我错过了什么吗?

0 投票
0 回答
362 浏览

django - Ubuntu 上的 CeleryBeat 问题

我注意到 CeleryBeat 的奇怪问题。我经常使用它来运行对我来说非常重要和重要的周期任务。每隔一段时间(几乎每 2-5 天)我注意到 CeleryBeat 默默地失败了。日志(全部)中没有警告或错误,这真的让我很困惑。

有没有其他方法可以从 celerybeat 获取信息?我的 celeryd 配置中有以下 celery 选项:

还有什么我想念的吗?

[编辑]

临死前我的 celerybeat 日志中的最后一个条目:

如您所见,它确实没有任何信息。我的 django 日志和 celery 日志也没有填满任何错误。

0 投票
1 回答
700 浏览

python - Nginx(Django) ImportError: cannot import name celeryd

I tested my project in my local machine, and it worked fine. But after uploading to a remote server(CentOS), I cannot execute celerybeat.

Here is my command. python manage.py celeryd --events --loglevel=INFO -c 5 --settings=[settings-directory].production

This command works in the local machine(with --settings=[settings-directory].local), but in the remote server, ImportError: cannot import name celeryd occured.

Setting about celery is in base.py. local.py and production.py import the file. In production.py, there are just DEBUG, static, database settings.

I can import djcelery and celery in shell of the remote machine.

How could I solve this?

--

I think this is a version problem.. I'm reading about celery3.1

0 投票
2 回答
30264 浏览

django - 在 celery 3.1 中,制作 django 周期性任务

Django 中的东西变化太大,所以我不能使用 3.1。我需要一些帮助。

我阅读了有关在 django 中创建任务的信息,并阅读了Periodic Tasks文档。但我不知道如何在 django 中进行周期性任务。我认为这是因为我的英语水平低..

在旧版本的 Celery 中,我导入了 djcelerycrontab并在settings.py中设置了 CELERYBEAT_SCHEDULE ,并由manage.py执行。

但似乎我不能再以这种方式执行 celery demon 了。比我应该把 CELERYBEAT_SCHEDULE 放在哪里?在文档中的 django 示例中,它们设置os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')proj/proj/celery.py中。(1) 那么在settings.py中设置celerybeat (和之前一样)可以吗?

(2) 如果可以的话,一个在 django 中制作周期性任务的小例子将非常有帮助。当我阅读教程时,最令人困惑的部分是File Path。如果您不想提供完整的示例,如果您解释我应该在哪里制作任务、设置节拍和执行守护程序,我将不胜感激。

谢谢阅读。

0 投票
1 回答
441 浏览

python - 无法让芹菜工人工作

我一直在研究一个使用 Celery beat 来安排任务的项目。在本地,我一直使用 RabbitMQ 作为代理,一切正常。

当我将我的项目推送到远程服务器时,我将代理更改为 Redis。

celery beat正如我在控制台中看到的那样,该进程接缝工作正常,它正在调度任务。但工人无法接任务。当我通过在任务上使用 delay() 从 shell 异步调用任务时,即使这样,工作人员也不会拾取任务。

我认为 Redis 可能有些奇怪。然而,情况似乎并非如此。我让我的项目在本地使用 Redis。在服务器上,当我将代理更改为 RabbitMQ 时,即使这样我也遇到了同样的问题。

我的本地机器运行 Mac OS,服务器运行 Debian 6。

可能是什么问题?我如何调试这种情况并让工作人员消费任务并完成工作?我正在使用 Python 2.7。

0 投票
1 回答
2015 浏览

python - Celery beat args:列表与元组

Celery 文档描述了如何将位置参数作为列表或元组传递给节拍调度任务。

我有一个任务,它需要一个参数,一个整数列表:

我的 celerybeat 时间表如下所示:

我的任务因 "int is not iterable" 而失败TypeError。根据我的显示器(芹菜花),args 以[1].

当我将 args 设为列表时,例如[[1]]arg 会显示在监视器中,[[1]]并且它工作正常。

我的问题是:当它是一个元组时,它是如何传递参数的?为什么?

0 投票
5 回答
15332 浏览

python - Celery Beat:一次限制为单个任务实例

我有 celery beat 和 celery(四名工人)批量做一些加工步骤。其中一项任务大致类似于“对于每个尚未创建 Y 的 X,创建一个 Y”。

该任务以半快速(10 秒)的速度定期运行。任务完成得非常快。还有其他任务正在进行。

我多次遇到过节拍任务明显积压的问题,因此同时执行相同的任务(来自不同的节拍时间),导致错误地重复工作。似乎任务是乱序执行的。

  1. 是否可以限制 celery beat 以确保一次只有一个未完成的任务实例?在任务上设置类似rate_limit=5的“正确”方法吗?

  2. 是否可以确保按顺序执行 beat 任务,例如,不是分派任务,而是 beat 将其添加到任务链中?

  3. 除了使这些任务本身以原子方式执行并且可以安全地同时执行之外,最好的处理方法是什么?这不是我所期望的击败任务的限制……</p>

任务本身的定义很天真:

这是一个实际的(清理过的)日志:

  • [00:00.000]foocorp.tasks.add_y_to_xs 已发送。id->#1
  • [00:00.001]收到任务:foocorp.tasks.add_y_to_xs[#1]
  • [00:10.009]foocorp.tasks.add_y_to_xs 已发送。id->#2
  • [00:20.024]foocorp.tasks.add_y_to_xs 已发送。id->#3
  • [00:26.747]收到任务:foocorp.tasks.add_y_to_xs[#2]
  • [00:26.748]任务池:应用 #2
  • [00:26.752]收到任务:foocorp.tasks.add_y_to_xs[#3]
  • [00:26.769]接受的任务:foocorp.tasks.add_y_to_xs[#2] pid:26528
  • [00:26.775]任务 foocorp.tasks.add_y_to_xs[#2] 在 0.0197986490093s 内成功:无
  • [00:26.806]任务池:应用 #1
  • [00:26.836]任务池:应用 #3
  • [01:30.020]接受的任务:foocorp.tasks.add_y_to_xs[#1] pid:26526
  • [01:30.053]接受的任务:foocorp.tasks.add_y_to_xs[#3] pid:26529
  • [01:30.055]foocorp.tasks.add_y_to_xs[#1]:为 X id 添加 Y #9725
  • [01:30.070]foocorp.tasks.add_y_to_xs[#3]:为 X id 添加 Y #9725
  • [01:30.074]任务 foocorp.tasks.add_y_to_xs[#1] 在 0.0594762689434s 内成功:无
  • [01:30.087]任务 foocorp.tasks.add_y_to_xs[#3] 在 0.0352867960464s 内成功:无

我们目前使用 Celery 3.1.4 和 RabbitMQ 作为传输。

编辑丹,这是我想出的:

丹,这就是我最终使用的:

以及 celery 任务装饰器(仅用于周期性任务):

0 投票
0 回答
996 浏览

python - 芹菜中高效的重复任务?

我每天有大约 250,000 个重复任务;其中大约五分之一可能会以每天不同的预定日期时间进行更新。

这可以在 Celery 中有效地完成吗?- 我担心芹菜的beat.py

0 投票
0 回答
879 浏览

python - 如何在 Celery 中创建子任务

我正在尝试遍历buildings我的数据库中的许多内容。在每个建筑物apt中,我为其中的每个生成一个账单building。这一切都发生在Celery每月 25 日的计划任务上。账单将在下个月寄出。我知道我可以使用chordsgroups其他子任务,我只是对如何将它组织成一个巨大的工作机制感到困惑。这是我迄今为止尝试过的(不起作用)。我正在测试使用crontab和当前时间,以便我可以看到它运行。在生产中,我会将该日期设置为每个月的 25 日。

配置文件

任务.py

在发生的事情中,bill_all_buildings它开始运行,然后它说:

然后什么也没有发生。

0 投票
1 回答
940 浏览

python - 使用 django 将 celerybeat 作为守护进程运行的问题

所以我让它正常工作,并且我已经测试过它的性能完全符合它的要求,但我似乎无法让它作为守护进程正常运行。所以对于初学者来说,我正在运行一个 django 应用程序并使用 mongodb 作为后端,我拥有所有必需的模块

目前我可以使用成功运行它

重要的是我的项目文件夹,而 celeryapp 是应用程序(我发现在教程中将它命名为 celery 只是导致它根本不起作用)

所以我创建了文件

并使用

但主要问题似乎是我的配置在我的 Django settings.py 中

出于某种原因,它似乎从未从那里读取我的设置。我什至有我的 CELERY_APP = matter.celeryapp 但这似乎不起作用。

我知道这是不正确的,因为它使用日志文件显示它使用的是默认代理而不是 mongo