标签: celerybeat

如何动态添加/删除周期性任务到芹菜(celerybeat)

如果我有一个定义如下的函数:

def add(x,y):
  return x+y
Run Code Online (Sandbox Code Playgroud)

有没有办法动态添加这个函数作为芹菜PeriodicTask并在运行时启动它?我希望能够做类似(伪代码)的事情:

some_unique_task_id = celery.beat.schedule_task(add, run_every=crontab(minute="*/30"))
celery.beat.start(some_unique_task_id)
Run Code Online (Sandbox Code Playgroud)

我还想用类似(伪代码)的东西动态地停止或删除该任务:

celery.beat.remove_task(some_unique_task_id)
Run Code Online (Sandbox Code Playgroud)

要么

celery.beat.stop(some_unique_task_id)
Run Code Online (Sandbox Code Playgroud)

仅供参考我没有使用djcelery,它允许您通过django管理员管理定期任务.

python celery celerybeat

43
推荐指数
4
解决办法
2万
查看次数

在芹菜3.1中,制作django周期性任务

Django的事情变化太大,所以我不能使用3.1.我需要一些帮助.

我读到了在django中创建任务,并阅读了Periodic Tasks文档.但我不知道如何在django中定期执行任务.我想这是因为我的低级英语..

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

但似乎我再也不能以这种方式执行芹菜deamon了.比我应该把CELERYBEAT_SCHEDULE放在哪里?在docs的django示例中,它们设置os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')proj/proj/celery.py中.(1)所以在settings.py中设置celerybeat (就像之前一样)可以吗?

(2)如果可以的话,在django中制作周期性任务的一个小例子将非常有帮助.当我阅读教程时,最令人困惑的部分是文件路径.如果你不想提供一个完整的例子,如果你解释我应该在哪里制作任务,设置节拍和执行deamon,我将非常感激.

谢谢阅读.

django celery celerybeat

30
推荐指数
2
解决办法
3万
查看次数

禁用celerybeat的pidfile

celeryd不需要pid文件,但celerybeat似乎.有没有办法禁用它?我正在使用Upstart来管理进程,因此使用pidfile是多余的.

celery celerybeat

21
推荐指数
1
解决办法
5834
查看次数

芹菜停止执行链

我有一个check_orders任务,定期执行.它创建了一组任务,以便我可以计算执行任务所花费的时间,并在完成任务时执行某些操作(这是res.join [1]和grouped_subs的目的)分组的任务是成对的链式任务.

我想要的是当第一个任务不满足条件(失败)时不执行链中的第二个任务.对于我的生活,我无法理解这一点,我觉得这对于作业队列管理器来说是非常基本的功能.当我尝试在[2]之后注释掉的东西(引发异常,删除回调)......由于某种原因,我们在check_orders中遇到了join()(它打破了组).我已经尝试将ignore_result设置为False以及所有这些任务,但它仍然不起作用.

@task(ignore_result=True)
def check_orders():
    # check all the orders and send out appropriate notifications
    grouped_subs = []

    for thingy in things:
       ...

        grouped_subs.append(chain(is_room_open.subtask((args_sub_1, )), 
                        notify.subtask((args_sub_2, ), immutable=True)))

    res = group(grouped_subs).apply_async()

    res.join()         #[1]
    logger.info('Done checking orders at %s' % current_task.request.id))

@task(ignore_result=True)
def is_room_open(args_sub_1):
    #something time consuming
    if http_req_and_parse(args_sub_1):
        # go on and do the notify task
        return True
    else:
        # [2]
        # STOP THE CHAIN SOMEHOW! Don't execute the rest of the chain, how?
        # None of the following …
Run Code Online (Sandbox Code Playgroud)

python celery celery-task django-celery celerybeat

20
推荐指数
3
解决办法
6825
查看次数

解决celerybeat是一个单一的失败点

我正在寻找推荐的解决方案来解决celerybeat是芹菜/ rabbitmq部署的单点故障.通过搜索网络,到目前为止我找不到任何有意义的东西.

在我的情况下,每天定时调度员开始一系列可能运行半天或更长时间的工作.由于只能有一个celerybeat实例,如果它发生了某些事情或它正在运行的服务器,将无法运行关键作业.

我希望已经有一个可行的解决方案,因为我不能成为唯一需要可靠(集群或类似)调度程序的人.如果我不需要,我不想诉诸某种数据库支持的调度程序.

celery celerybeat

17
推荐指数
1
解决办法
1084
查看次数

Celerybeat没有执行定期任务

你如何诊断为什么manage.py celerybeat不执行任何任务?

我通过supervisord运行celerybeat命令:

/usr/local/myapp/src/manage.py celerybeat --schedule=/tmp/celerybeat-schedule-myapp --pidfile=/tmp/celerybeat-myapp.pid --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

Supervisord似乎运行celerybeat就好了,日志文件显示:

[2013-06-12 13:17:12,540: INFO/MainProcess] Celerybeat: Starting...
[2013-06-12 13:17:12,571: WARNING/MainProcess] Reset: Account for new __version__ field
[2013-06-12 13:17:12,571: WARNING/MainProcess] Reset: Account for new tz field
[2013-06-12 13:17:12,572: WARNING/MainProcess] Reset: Account for new utc_enabled field
Run Code Online (Sandbox Code Playgroud)

我有几个定期任务显示为启用http://localhost:8000/admin/djcelery/periodictask,应该每隔几分钟运行一次.但是,celerybeat日志从不显示正在执行的任何内容.为什么会这样?

python django django-celery celerybeat

13
推荐指数
1
解决办法
1万
查看次数

与主管和virtualenv监督celerybeat

我的celerybeat.conf

[program:celerybeat]
command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO
environment=PYTHONPATH=/path/app/env/bin

user=nobody
numprocs=1
stdout_logfile=/var/log/celeryd.log
stderr_logfile=/var/log/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
priority=998
Run Code Online (Sandbox Code Playgroud)

当我启动主管时,我收到一个错误:

pidfile_fd = os.open(self.path, PIDFILE_FLAGS, PIDFILE_MODE)
celery.platforms.LockFailed: [Errno 13] Permission denied: '/celerybeat.pid'
Run Code Online (Sandbox Code Playgroud)

不知道怎么解决这个问题?

python celery supervisord celerybeat

13
推荐指数
2
解决办法
7956
查看次数

检查芹菜节拍是否正常运行

在我的Django项目中,我使用Celery和Rabbitmq在后台运行任务.我正在使用芹菜节拍调度程序来执行定期任务.如何以编程方式检查芹菜节拍是否正常运行?

django celery celerybeat

13
推荐指数
2
解决办法
7136
查看次数

Django Celery结果将任务ID设置为人类可读的东西?

多天后,我有一个工作芹菜和芹菜节拍任务列表,结果使用django_celery_results存储.但是,当我查看表记录时,它没有任何有用的信息.

是否可以将任务ID设置为人类可读的东西?

结果

一个例子是使用demo任务,它返回no,但是一个不可读的任务id

tasks.py

@app.task
def test(a,b):
    return a + b
Run Code Online (Sandbox Code Playgroud)

app.settings中的调度程序

CELERYBEAT_SCHEDULE = {
    'test_task': {
        'task': 'home.tasks.test',
        'schedule': crontab(minute='*/1'),
    },
Run Code Online (Sandbox Code Playgroud)

python celery-task django-celery celerybeat

12
推荐指数
2
解决办法
1104
查看次数

正确设置django redis芹菜和芹菜节拍

我一直试图设置django + celery + redis + celery_beats,但它给了我麻烦.文档非常简单,但是当我运行django服务器,redis,芹菜和芹菜节拍时,没有任何内容被打印或记录(我所有的测试任务都会记录它的东西).

这是我的文件夹结构:

- aenima 
 - aenima
   - __init__.py
   - celery.py

 - criptoball
   - tasks.py
Run Code Online (Sandbox Code Playgroud)

celery.py看起来像这样:

from __future__ import absolute_import, unicode_literals
import os
from django.conf import settings
from celery import Celery


# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'aenima.settings')

app = Celery("criptoball")
app.conf.broker_url = 'redis://localhost:6379/0'

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related …
Run Code Online (Sandbox Code Playgroud)

python django celery celerybeat

12
推荐指数
2
解决办法
1019
查看次数