django+celery配置(定时任务+循环任务)

下面介绍一下django+celery的配置做定时任务

1.首先介绍一下环境和版本

   python==2.7

 django == 1.8.1

   celery == 3.1.23

   django-celery == 3.1.17

2.celery的安装

  sudo pip install celery==3.1.23

  sudo pip install django-celery==3.1.17

3.新建一个项目

  (1)django-admin startproject django_celery_demo

      (2)cd django_celery_demo

      (3)django-admin startapp appdemo

4.修改项目配置(django_celery_demo/django_celery_demo/settings.py)

    (1)第一行引入absolute_import

from __future__ import absolute_import

    (2)INSTALLED_APPS添加'djcelery','appdemo'

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'djcelery',
    'appdemo',
)

    (3)在setting.py最下方加入

import djcelery
from celery.schedules import crontab
djcelery.setup_loader()
BROKER_URL = 'redis://:dahai123@192.168.5.60:6380/6'
# BROKER_URL = 'redis://:密码@主机地址:端口号/数据库号'

from datetime import timedelta


CELERYBEAT_SCHEDULE = {
    'add-every-3-seconds': {
        'task': 'appdemo.tasks.test_celery',
        # 'schedule': crontab(minute=u'40', hour=u'17',),
        'schedule': timedelta(seconds=3),
        'args': (16, 16)
    },
}

5.创建django_celery_demo/django_celery_demo/celery.py,文件内容如下

from __future__ import absolute_import

import os

from celery import Celery, platforms

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

from django.conf import settings  # noqa

app = Celery('django_celery_demo')
platforms.C_FORCE_ROOT = True

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

 

6.在django_celery_demo/django_celery_demo/__init__.py引入

from __future__ import absolute_import
from .celery import app as celery_app

7.创建django_celery_demo/appdemo/tasks.py文件,内容如下

 

from __future__ import absolute_import

import logging
from celery import task
from celery.utils.log import get_task_logger
from celery.schedules import crontab


@task
def test_celery(x, y):
    logger = get_task_logger(__name__)
    logger.info('func start  ----------------->')
    logger.info('application:%s', "TEST_APP")
    logger.info('func end -------------------->')
    print x + y
    return x + y


@task
def test_multiply(x, y):
    logger = get_task_logger(__name__)
    logger.info('func start  ----------------->')
    logger.info('application:%s', "TEST_APP")
    logger.info('func end -------------------->')
    print x * y
    return x * y

 

 

 

8.开始测试

  python manage.py makemigrations  # 同步数据库,首次使用

  python  manage.py celery -A django_celery_demo  worker -B    # django_celery_demo为celery和setting所在文件夹名

  

9.上面时循环任务,还可以做定时任务:

django_celery_demo/django_celery_demo/settings.py

CELERYBEAT_SCHEDULE = {
    'add-every-3-seconds': {
        'task': 'appdemo.tasks.test_celery',
        # 'schedule': crontab(minute=u'40', hour=u'17',),
        'schedule': timedelta(seconds=3),
        'args': (16, 17)
    },
    'timing': {
        'task': 'appdemo.tasks.test_multiply',
        'schedule': crontab(minute=u'28', hour=u'11',),
        # 'schedule': timedelta(seconds=3),
        'args': (2, 3)
    },
}

不要忘了把时间改为北京时间,我在上海就改成了上海

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

定时在11:28开启的任务执行

转载于:https://www.cnblogs.com/wangmin0216/p/6567539.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Celery 是一个用于 Django 框架的分布式任务队列工具。它结合了 Django 的 Web 开发能力和 Celery 的异步任务处理能力。通过使用 Celery,你可以将耗时的任务(如发送电子邮件、处理图像、执行定时任务等)从主线程中分离出来,以提高应用的性能和响应速度。 你可以通过以下步骤来集成 DjangoCelery: 1. 安装 Celery:在命令行中使用 pip 安装 Celery 库:`pip install celery` 2. 配置 Celery:在 Django 项目的 settings.py 文件中配置 Celery 相关的设置,主要包括消息代理器(message broker)的设置和任务结果存储的设置。 3. 创建任务:在 Django 项目中创建需要异步执行的任务任务是一个 Python 函数,使用 `@task` 装饰器进行标记。 4. 启动 Celery Worker:在命令行中使用 `celery -A your_project_name worker --loglevel=info` 启动 Celery Worker,该命令会监听并执行任务队列中的任务。 5. 触发任务:在你的 Django 代码中调用任务函数,可以使用 `your_task.delay()` 来触发异步执行任务。 这样,当你触发任务时,它会被添加到 Celery任务队列中,并由 Celery Worker 异步执行。执行结果可以存储在指定的结果存储中,也可以通过回调函数获取。 注意:配置消息代理器和结果存储器时,你可以选择使用不同的后端,如 RabbitMQ、Redis、Amazon SQS 等。 以上是关于 Django Celery 的简要介绍和基本使用步骤,如果你有具体问题或需要更详细的指导,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值