四、Django中使用celery
2024-10-20 16:35:02
项目跟目录创建celery包,目录结构如下:
mycelery/
├── config.py
├── __init__.py
├── main.py
└── sms/
├── __init__.py
├── tasks.py
配置文件config.py:
broker_url = 'redis://127.0.0.1:6379/15'
result_backend = 'redis://127.0.0.1:6379/14'
任务文件tasks.py
# celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
from mycelerys.main import app
import time
import logging
log = logging.getLogger("django")
@app.task # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
def send_sms(mobile):
"""发送短信"""
print("向手机号%s发送短信成功!"%mobile)
time.sleep(5)
return "send_sms OK"
@app.task # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
def send_sms2(mobile):
print("向手机号%s发送短信成功!" % mobile)
time.sleep(5)
return "send_sms2 OK"
最后在main.py主程序对django的配置文件进行加载
# 主程序
import os
from celery import Celery
# 创建celery实例对象
app = Celery("sms")
# 把celery和django进行组合,识别和加载django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryPros.settings.dev')
# 通过app对象加载配置
app.config_from_object("mycelerys.config")
# 加载任务
# 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称
# app.autodiscover_tasks(["任务1","任务2"])
app.autodiscover_tasks(["mycelerys.sms",])
# 启动Celery的命令
# 强烈建议切换目录到mycelery根目录下启动
# celery -A mycelery.main worker --loglevel=info
Django视图调用:
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render,HttpResponse
from mycelerys.sms.tasks import send_sms,send_sms2
from datetime import timedelta
from datetime import datetime
def test(request):
################################# 异步任务
# 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决
# send_sms.delay("110")
# send_sms2.delay("119")
# send_sms.delay() 如果调用的任务函数没有参数,则不需要填写任何内容
################################# 定时任务
# ctime = datetime.now()
# # 默认用utc时间
# utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
# time_delay = timedelta(seconds=10)
# task_time = utc_ctime + time_delay
# result = send_sms.apply_async(["911", ], eta=task_time)
# print(result.id)
return HttpResponse('ok')
最新文章
- Word2vec多线程(tensorflow)
- mysql explain执行计划详解
- CentOS MySQL 配置
- Window Server 2012 R2 没有照片查看器 打开图片都是画板问题怎么解决
- 一个统计报表sql问题
- win2003 Enterprise Edition sp2 企业版序列号
- MapReduce之Mapper类,Reducer类中的函数(转载)
- android 资源文件
- zabbix监控服务器部署
- Eclipse中配置weka,以及添加算法
- Hibernate框架双向多对多关联映射关系
- Struts2学习笔记④
- 软件工程(GZSD2015)学生博客列表
- python基础6之迭代器&;生成器、json&;pickle数据序列化
- July 05th. 2018, Week 27th. Thursday
- C# 使用CsvHelper读取.csv文件
- WEB前端开发常见问题汇总
- CF #552(div3)F 背包问题
- UVALive - 4222
- 优雅的使用列表推导式和lambda
热门文章
- Luogu1038 神经网络 (拓扑排序)
- Spring源码 07 IOC refresh方法2
- 一文带你弄懂 JVM 三色标记算法!
- C++ 一键关闭屏幕
- ping: sina.cn: Name or service not known
- 搭建eBackup对接NFS服务
- 使用Inno Setup 制作软件安装包详细教程(与开发语言无关)
- docker学习笔记-常用镜像相关命令
- 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)
- Java中的StringBuilder和StringBuffer适用场景