xadmin引入celery执行异步任务与定时任务

一、安装

pip install celery

pip install django-celery-beat

pip install django-celery-results

pip install redis

安装这4个库

请注意不是django-celery、django-redis、celery-with-redis等库

以前版本的Celery需要一个单独的库来与Django一起工作

但是自从3.1以后就不再是这样了

Django现在支持开箱即用

pip list

celery==4.3.0
django-celery-beat==1.5.0
django-celery-results==1.1.2
redis==3.2.1

二、配置Celery

1、在项目demo/settings.py文件下加入:

‘django_celery_beat‘,# django-celery-beat

‘django_celery_results‘,# django-celery-results
CELERY_ENABLE_UTC = False# 不使用国际标准时间CELERY_TIMEZONE = ‘Asia/Shanghai‘# 使用亚洲/上海时区DJANGO_CELERY_BEAT_TZ_AWARE = False# 解决时区问题CELERY_BROKER_URL = ‘redis://:[email protected]@192.168.1.102:6379/0‘# redis://:[email protected]:port/db_numberCELERY_BROKER_TRANSPORT = ‘redis‘# 使用redis作为中间件CELERY_BEAT_SCHEDULER = ‘django_celery_beat.schedulers:DatabaseScheduler‘# 自定义调度类,使用Django的ORMCELERY_RESULT_BACKEND = ‘django-db‘# 任务结果,使用Django的ORMCELERY_ACCEPT_CONTENT = [‘application/json‘]# 设置任务接收的序列化类型CELERY_TASK_SERIALIZER = ‘json‘# 设置任务序列化方式CELERY_RESULT_SERIALIZER = ‘json‘# 设置结果序列化方式

2、在项目demo目录下新建celery.py文件:

from __future__ import absolute_import, unicode_literalsimport osfrom celery import Celery, platformsfrom django.utils.datetime_safe import datetime

os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘demo.settings‘)# 设置默认celery命令行的环境变量

app = Celery(‘demo‘)# 实例化celery

app.now = datetime.now# 解决时区问题

app.config_from_object(‘django.conf:settings‘, namespace=‘CELERY‘)# 直接从Django设置中配置Celery

app.autodiscover_tasks()# 从所有应用中加载任务模块tasks.py

platforms.C_FORCE_ROOT = True# 解决celery不能root用户启动的问题

3、在项目demo/__init__.py文件加入:

(请注意不是应用的__init__.py)

from __future__ import absolute_import, unicode_literalsfrom demo.celery import app as celery_app

import pymysql

__all__ = (‘celery_app‘,)

pymysql.install_as_MySQLdb()

4、在应用product目录下面新建tasks.py文件:

# Create your tasks herefrom __future__ import absolute_import, unicode_literals

from demo.celery import app

@app.taskdef debug_1():    print("调试_1已运行!")

@app.taskdef debug_2():    print("调试_2已运行!")

5、在应用product目录下面product/admin.py文件加入:

from django_celery_beat.models import IntervalSchedule, CrontabSchedule, ClockedSchedule, SolarSchedule, PeriodicTaskfrom django_celery_results.models import TaskResult
class IntervalScheduleAdmin(object):    list_display = [        ‘id‘, ‘every‘, ‘period‘,    ]    ordering = [‘id‘]    search_fields = [‘every‘]    list_per_page = 10

class CrontabScheduleAdmin(object):    list_display = [        ‘id‘, ‘minute‘, ‘hour‘,        ‘day_of_week‘, ‘day_of_month‘, ‘month_of_year‘, ‘timezone‘    ]    ordering = [‘id‘]    search_fields = [‘minute‘]    list_per_page = 10

class SolarScheduleAdmin(object):    list_display = [        ‘id‘, ‘event‘, ‘latitude‘, ‘longitude‘    ]    ordering = [‘id‘]    search_fields = [‘event‘]    list_per_page = 10

class ClockedScheduleAdmin(object):    list_display = [        ‘id‘, ‘clocked_time‘, ‘enabled‘    ]    ordering = [‘id‘]    search_fields = [‘clocked_time‘]    list_per_page = 10

class PeriodicTaskAdmin(object):    list_display = [        ‘id‘, ‘name‘, ‘task‘, ‘args‘, ‘kwargs‘, ‘queue‘,        ‘exchange‘, ‘routing_key‘, ‘expires‘, ‘enabled‘,        ‘last_run_at‘, ‘total_run_count‘, ‘date_changed‘, ‘description‘,        ‘interval‘, ‘crontab‘, ‘solar‘, ‘clocked‘, ‘one_off‘,        ‘start_time‘, ‘priority‘, ‘headers‘    ]    ordering = [‘id‘]    search_fields = [‘name‘]    list_per_page = 10

class TaskResultAdmin(object):    list_display = [        ‘id‘, ‘task_id‘, ‘status‘, ‘content_type‘, ‘content_encoding‘,        ‘result‘, ‘date_done‘, ‘traceback‘, ‘hidden‘, ‘meta‘,        ‘task_args‘, ‘task_kwargs‘, ‘task_name‘    ]    ordering = [‘id‘]    search_fields = [‘task_id‘]    list_per_page = 10
xadmin.site.register(IntervalSchedule, IntervalScheduleAdmin)# 间隔任务xadmin.site.register(CrontabSchedule, CrontabScheduleAdmin)# 定时任务xadmin.site.register(SolarSchedule, SolarScheduleAdmin)# 太阳时间表xadmin.site.register(ClockedSchedule, ClockedScheduleAdmin)# 计时时间表xadmin.site.register(PeriodicTask, PeriodicTaskAdmin)# 配置任务

xadmin.site.register(TaskResult, TaskResultAdmin)# 任务结果

三、迁移数据库

(没有静态资源文件,也不用激活模型)

python manage.py migrate

可以看到数据库新增了这几张表

四、Web后台

五、启动Celery

开2个终端到项目的根目录下分别执行

celery -A demo worker -l info

启动任务执行单元Worker

celery -A demo beat -l info

启动定时任务

控制台日志

Web后台

原文地址:https://www.cnblogs.com/yjlch1016/p/11625471.html

时间: 2024-08-29 20:51:58

xadmin引入celery执行异步任务与定时任务的相关文章

celery执行异步任务和定时任务

一.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成.包括,RabbitMQ, Redis等等 任务执行单元 Worker是Celery提供

djcelery执行异步任务和定时任务

import djcelery from datetime import timedelta djcelery.setup_loader() CELERY_QUEUES = { 'beat_tasks':{ 'exchange':'beat_tasks', 'exchange_type':'direct', 'binding_key':'beat_tasks', }, 'work_queue': { 'exchange': 'work_queue', 'exchange_type': 'dire

Python开发【模块】:Celery 分布式异步消息任务队列

Celery 前言: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情. 你想做一个定时任务,比如每天检测一下你们所有客户的

SpringBoot任务篇Ⅴ --- 异步任务、定时任务、邮件任务

Java的任务在项目中需要用到的地方很多,比如,每月月末的财务报表给财务部门,定时给领导发个邮件短信等等.这时候我们就需要用到任务了,任务调度本身涉及到多线程并发.运行时间规则制定和解析.场景保持与恢复.线程池维护等诸多方面的工作.之前的学习中也使用过任务的框架Quartz,用起来也十分地编辑.本篇文章主要讲的是SpringBoot中基于注解的任务调度的简单使用.  一.异步任务 正常情况下,同一线程中的方法是同步执行的,比如我要请求一段数据,但是这个数据等待service层执行3s之后,然后才

调用enqueue执行异步请求有一个参数设置回调。

前面的内容介绍了OkHttp,本章就来教大家okhttp的基本使用,学了这些基本东西之后,大家有其他的需求可以自行扩展.以下的所有请求都是异步请求服务器,在真实的企业开发中,基本都是异步. 首先创建一个request对象,通过request设置请求url,通过这个类还可以设置更多的请求信息.然后通过Request去构造一个Call对象. 调用enqueue执行异步请求,有一个参数设置回调.请求成功或者失败会调用Callback接口的onResponse跟onFailure方法,因为这是异步请求,

Android 异步任务 代码很简短,简单异步工具封装,方便执行异步任务

比较简单,就3个类. 1.创建一个单例的线程池,用来执行异步任务 <pre name="code" class="java">package com.ferris.pool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FerrisPoolManager { private ExecutorService

django入门8之xadmin引入富文本和excel插件

django入门8之xadmin引入富文本和excel插件 Xadmin引入富文本 插件的文档 https://xadmin.readthedocs.io/en/docs-chinese/make_plugin.html Django ueditor插件的安装 下载地址:https://github.com/zhangfisher/DjangoUeditor 进入mxonline的虚拟环境 Python setup.py install 进行安装 在settings.py中引入ueditor 在

Django使用Celery加redis执行异步任务

简单使用 安装celery及redis 定义celery任务 项目下新建tasks.py from celery import Celery # 创建一个Celery类的实例对象 app = Celery('celery_task.tasks', broker='redis://127.0.0.1:6379/8') # 定义任务函数 @app.task def send_register_active_email(message): with open("D:\\celery\\text.txt

36、springboot——异步任务、定时任务、邮件任务

一.异步任务 测试如下 1.不是异步方法的时候: 进行等待三秒再进行应答 @Service public class AsynService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("处理数据....."); } } controller类: @RestController p