前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django操作异步任务

Django操作异步任务

作者头像
cywhat
发布2023-04-27 15:03:56
6420
发布2023-04-27 15:03:56
举报
文章被收录于专栏:cywhat

前置条件

代码语言:text
复制
Python==3.7.0
Pip==3
Django==3.2
celery==5.0.5
redis==3.5.3

1、安装

代码语言:shell
复制
pip3 install celery

2、目录

代码语言:shell
复制
- Heng_Tools/
  - manage.py
  - Heng_Tools/
    - __init__.py # 修改这个文件
    - celery.py # 新增这个文件
    - asgi.py
    - settings.py # 修改这个文件
    - urls.py
    - wsgi.py
  - web/
    - static/
    - forms/
    - views/
    - temples/
    - admin.py
    - models.py
    - apps.py
    - views.py
2.1、修改__init__.py配置
代码语言:python
代码运行次数:0
复制
# 加入如下配置
from .celery import app as celery_app

__all__ = ('celery_app',)
2.2、新增文件celery.py
代码语言:python
代码运行次数:0
复制
# 加入如下代码
import os
from celery import Celery

# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Heng_Tools.settings')

# 实例化
app = Celery('Heng_Tools')

# namespace='CELERY'作用是允许你在Django配置文件中对Celery进行配置
# 但所有Celery配置项必须以CELERY开头,防止冲突
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动从Django的已注册app中发现任务
app.autodiscover_tasks()


# 一个测试任务
@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')
2.3、修改settings

注意

settings和Heng_Tools同目录

代码语言:python
代码运行次数:0
复制
# 关掉修改默认市区
USE_TZ = False

# 最重要的配置,设置消息broker,格式为:db://user:password@host:port/dbname
# 如果redis安装在本机,使用localhost
# 如果docker部署的redis,使用redis://redis:6379
celery_broker_url = "redis://127.0.0.1/:6379/0"
celery_backend_url = "redis://127.0.0.1/:6379/1"

# 时区设置
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_RESULT_BACKEND = "django-db"
CELERY_ACCEPT_CONTENT = ['application/json', ]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

# INSTALLED_APPS加入如下配置
INSTALLED_APPS = [
    'celery',
    'django_celery_beat',
    'django_celery_results'
]

3、新增task

注意

新增的异步任务必须以task.py命名,而且要放在你的django-web程序中,我这里是web

代码语言:python
代码运行次数:0
复制
from celery import Celery

# 专属于myproject项目的任务
app = Celery('Heng_Tools')


@app.task
def test():
    pass
代码语言:python
代码运行次数:0
复制
from celery import Celery

# app/tasks.py, 可以复用的task
from celery import shared_task
import time


@shared_task
def add(x, y):
    time.sleep(2)
    return x + y
代码语言:text
复制
装饰器`@shared_task`可以让我们避免对某个项目名对应Celery实例的依赖,使app的可移植性更强。

4、运行

代码语言:shell
复制
Celery -A Heng_Tools worker -l info
代码语言:shell
复制
# 如果看到这行就说明启动成功了
[2023-04-18 15:27:03,191: INFO/MainProcess] celery@cywhat ready.

5、调用异步任务[俩种任务都会返回一个taskId]

5.1、调用方法1
代码语言:python
代码运行次数:0
复制
result = add.delay(3, 5)
5.1、调用方法2
代码语言:python
代码运行次数:0
复制
# apply_async方法,与delay类似,但支持更多参数
result = add.apply_async(args=[3, 5])

6、安装flower监控

代码语言:shell
复制
# 安装
pip3 install flower

# 运行
celery -A  Heng_Tools  flower

7、异步任务的一些操作

代码语言:python
代码运行次数:0
复制
# 查看task的任务id
result.task_id

# 查看task的任务状态
result.status

# 获取task的结果
AsyncResult(result.task_id).result

# 获取task的状态
AsyncResult(result.task_id).result

# 取消正在进行中的task任务
AsyncResult(result.task_id).revoke(terminate=True)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前置条件
  • 1、安装
  • 2、目录
    • 2.1、修改__init__.py配置
      • 2.2、新增文件celery.py
        • 2.3、修改settings
        • 3、新增task
        • 4、运行
        • 5、调用异步任务[俩种任务都会返回一个taskId]
          • 5.1、调用方法1
            • 5.1、调用方法2
            • 6、安装flower监控
            • 7、异步任务的一些操作
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档