前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django2 django-celery djcelery beat task 循环任务

django2 django-celery djcelery beat task 循环任务

作者头像
Autooooooo
发布2020-11-09 11:22:06
7730
发布2020-11-09 11:22:06
举报
文章被收录于专栏:CoxhuangCoxhuangCoxhuang

Celery

https://github.com/Coxhuang/django-celery.git

#0 需求

每隔3秒钟,把当前的时间写入数据库

#1 环境

1.1安装

Django (2.0.7)
celery (3.1.23)
django-celery (3.2.2) # 如果Django是2以上的版本,django-celery不能是低版本
django-crontab (0.7.1)
django-redis (4.9.0)

1.2前提条件

#2 项目结构

├─app
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tasks.py      # 新增文件
│  │  tests.py
│  │  views.py
│  │  __init__.py
│
├─celery_pro
│  │  celery.py     # 新增文件
│  │  settings.py
│  │  urls.py
│  │  wsgi.py
│  │  __init__.py
│
└─templates

#3 修改

3.1 settings.py

修改INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'djcelery',
    'app',
]

在末尾加上

import djcelery
from celery.schedules import crontab
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/0'


from datetime import timedelta


CELERYBEAT_SCHEDULE = {
    'celery_test': {
        'task': 'app.tasks.test_celery',
        'schedule': timedelta(seconds=3), # 每隔3秒执行一次
        'args': (16, 16)
    },
}

修改时区

TIME_ZONE = 'Asia/Shanghai' # 修改为上海时间
USE_I18N = True
USE_L10N = True
USE_TZ = False

3.2 tasks.py

在app目录下新建tasks.py文件

from __future__ import absolute_import
from celery import task
from app import models
import datetime

@task
def test_celery(x, y):
    models.CeleryModels.objects.create(time=datetime.datetime.now()) # 把当前时间写入数据库
    print("参数相加结果:",x+y)
    return "我是测试函数"

3.3 celery.py

在celery_pro目录下 ( settings.py同一目录 ) 新建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', 'celery_pro.settings') # 修改成celery_pro项目名

from django.conf import settings  # noqa

app = Celery('celery_pro') # 修改成celery_pro项目名
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)

3.4 models.py

from django.db import models

class CeleryModels(models.Model):

    time = models.DateTimeField(auto_now_add=True)

#4 运行

4.1 首次运行

数据库迁移

python manage.py makemigrations
python manage.py migrate

4.2 celery

进入django项目的根目录执行如下代码启动celery的worker(在manage.py同一目录下):

celery -A celery_pro worker -l info # celery_pro 项目名

同样在django项目的根目录下再打开一个命令行界面,执行如下代码(在manage.py同一目录下):

celery -A celery_pro beat -l info # celery_pro 项目名

#6 配置celery后台运行(守护进程)

https://cloud.tencent.com/developer/article/1744641

#7 flower

#7.1 安装

pip3 install flower

#7.2 使用

启动

celery -A app名 flower

https://flower-docs-cn.readthedocs.io/zh/latest/install.html#id2

#8 补充

#8.1 清空任务

在Django settings.py中设置定时任务时,存在这样一个问题:定时任务1不想要了,把代码删掉,但是在启动beat时,定时任务1还是会执行,如何把他从任务列表中删除呢?

  • 进入数据库
  • 找到djcelery_periodictask这个表
  • djcelery_periodictask这个表就是存放任务的列表,把不想继续执行的任务删除即可
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Celery
  • #0 需求
  • #1 环境
    • 1.1安装
      • 1.2前提条件
      • #2 项目结构
      • #3 修改
        • 3.1 settings.py
          • 3.2 tasks.py
            • 3.3 celery.py
            • #4 运行
              • 4.1 首次运行
                • 4.2 celery
                • #6 配置celery后台运行(守护进程)
                • #7 flower
                  • #7.1 安装
                    • #7.2 使用
                    • #8 补充
                      • #8.1 清空任务
                      相关产品与服务
                      数据传输服务
                      腾讯云数据传输服务(Data Transfer Service,DTS)可帮助用户在业务不停服的前提下轻松完成数据库迁移上云,利用实时同步通道轻松构建高可用的数据库多活架构,通过数据订阅来满足商业数据挖掘、业务异步解耦等场景需求。同时,DTS 还提供私有化独立输出版本 DTS-DBbridge,支持异构数据库和同构数据库之间迁移和同步,可以帮助企业实现完整数据库迁移(如 Oracle)。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档