返回顶部
首页 > 资讯 > 前端开发 > html >Django怎么实现异步任务
  • 823
分享到

Django怎么实现异步任务

2024-04-02 19:04:59 823人浏览 安东尼
摘要

本篇内容介绍了“Django怎么实现异步任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 对于网站来说

本篇内容介绍了“Django怎么实现异步任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

对于网站来说,给用户一个较好的体验是很重要的事情,其中最重要的指标就是网站的浏览速度。因此服务端要从各个方面对网站性能进行优化,比如可采用CDN加载一些公共静态文件,如jsCSS;合并css或者js从而减少静态文件的请求等等…..还有一种方法是将一些不需要立即返回给用户,可以异步执行的任务交给后台处理,以防网络阻塞,减小响应时间。看了the5fire的博客之后我受到了启发,决定从这方面进行改进。

我采用celery实现后台异步执行的需求。对于celery,先看一下网上给的celery的定义和用途:

Celery is a simple, flexible, and reliable distributed system to process vast amounts of messages, while providing operations with the tools required to maintain such a system.

 

It’s a task queue with focus on real-time processing, while also supporting task scheduling.

 

Celery has a large and diverse commUnity of users and contributors, you should come join us on IRC or our mailing-list.

上面的英文还是比较好理解的,简而言之,就是一个专注于实时处理和任务调度的分布式队列。

我买了一本《python web开发实战》,那里面也介绍了celery。说了使用celery的常见场景:

  1. WEB应用。当用户触发一个动作需要较长时间来执行完成时,可以把它作为任务交给celery异步执行,执行完再返回给用户。这点和你在前端使用ajax实现异步加载有异曲同工之妙。

  2. 定时任务。假设有多台服务器,多个任务,定时任务的管理是很困难的,你要在不同电脑上写不同的crontab,而且还不好管理。Celery可以帮助我们快速在不同的机器设定不同任务。

  3. 其他可以异步执行的任务。比如发送短信,邮件,推送消息,清理/设置缓存等。这点还是比较有用的。

综上所述,第1点和第3点的用途是我考虑celery的原因。目前,考虑在DjanGo中实现两个功能:

  1. 文章阅读量的统计

  2. 发送邮件

关于文章阅读量的统计,我之前的做法就是在用户每一次访问文章的时候,都会同步执行一遍+1的函数,现在打算用异步执行的方式。

下面介绍在Django中的使用方法:

1、环境准备

安装celery,RabbitMQ,django-celery.

2、启动消息中间件rabbitMQ
用它的原因是celery官方推荐的就是它,也可以用Redis等,但Redis会因为断电的原因造成数据全部丢失等问题。

让其在后台运行:

sudo rabbitmq-server -detached

3、在Django中配置(源代码)

项目代码结构

dailyblog

 

    ├── blog

│   ├── models.py

│   ├── serializer.py

│   ├── tasks.py

│   ├── urls.py

│   ├── views.py

├── config.yaml

├── dailyblog

│   ├── celery.py

│   ├── __init__.py

│   ├── __init__.pyc

│   ├── settings.py

│   ├── urls.py

│   ├── wsgi.py

对于celery的配置,需要编写几个文件:

  1、dailyblog/celery.py

 

  2、dailyblog/settings.py

 

  3、blog/tasks.py

 

  4、dailyblog/__init__.py

1、dailyblog/celery.py

本模块主要是创建了celery应用,配置来自django的settings文件。

from __future__ import absolute_import,unicode_literals #目的是拒绝隐士引入,celery.py和celery冲突。

import os

from celery import Celery

from django.conf import settings

 

 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyblog.settings")

 

#创建celery应用

app = Celery('dailyblog')

#You can pass the object directly here, but using a string is better since then the worker doesn’t have to serialize the object.

app.config_from_object('django.conf:settings')

#如果在工程的应用中创建了tasks.py模块,那么Celery应用就会自动去检索创建的任务。比如你添加了一个任务,在django中会实时地检索出来。

app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)

关于config_from_object,我对于如何加载配置文件还是比较感兴趣的,于是研究了一下源码,具体可以见:“celery加载配置文件”。

2、settings.py

配置celery,

import djcelery

djcelery.setup_loader()

 

 

#末尾添加

CELERYBEAT_SCHEDULER = ‘djcelery.schedulers.DatabaseScheduler‘  # 这是使用了django-celery默认的数据库调度模型,任务执行周期都被存在你指定的ORM数据库

 

#INstalled_apps

     INSTALLED_APPS = (

    ‘django.contrib.admin‘,

    ‘django.contrib.auth‘,

    ‘django.contrib.contenttypes‘,

    ‘django.contrib.sessions‘,

    ‘django.contrib.messages‘,

    ‘django.contrib.staticfiles‘,

    ‘djcelery‘,    #### 这里增加了djcelery 也就是为了在django admin里面可一直接配置和查看celery

    ‘blog‘,     ###

)

setup_loader目的是设定celery的加载器,源码:

  def setup_loader():  # noqa

    os.environ.setdefault(

        b'CELERY_LOADER', b'djcelery.loaders.DjangoLoader',

    )

3、dailyblog/init.py

from __future__ import absolute_import

 

# This will make sure the app is always imported when

# Django starts so that shared_task will use this app.

from .celery import app as celery_app

4、blog/tasks.py

from django.db.models import F

 

from .models import Article

from dailyblog import celery_app

 

 

@celery_app.task

def incr_readtimes(article_id):

    return Article.objects.filter(id=article_id).update(read_times=F('read_times') + 1)

这里面添加了一个任务。任务可以通过delay方法执行,也可以周期性地执行。

1

2

<td class="crayon-code" ">

supervisorctl start celery

1

2

3

4

5

6

7

1

2

3

4

5

6

7

8

9

10

1

至此,通过celery异步执行任务的程序写完了。除此之外,还可以写很多的异步任务,发邮件就是非常典型的一种。

“Django怎么实现异步任务”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Django怎么实现异步任务

本文链接: https://lsjlt.com/news/79344.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Django怎么实现异步任务
    本篇内容介绍了“Django怎么实现异步任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 对于网站来说...
    99+
    2024-04-02
  • django多线程异步任务怎么实现
    在Django中,可以使用Celery来实现多线程异步任务。首先,需要安装Celery:pip install celery然后,在...
    99+
    2023-10-21
    django
  • python异步任务怎么实现
    在Python中,可以使用协程(Coroutine)和异步IO来实现异步任务。首先,需要使用`async`关键字定义一个协程函数(C...
    99+
    2023-09-22
    python
  • springboot怎么实现异步任务
    这篇“springboot怎么实现异步任务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot怎么实现异步任务...
    99+
    2023-06-29
  • android异步任务怎么实现
    在Android中,可以使用AsyncTask类来实现异步任务。下面是一个简单的示例:1. 创建一个继承自AsyncTask的子类,...
    99+
    2023-08-18
    android
  • springboot定时任务和异步任务怎么实现
    这篇文章主要介绍“springboot定时任务和异步任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot定时任务和异步任务怎么实现”文章能帮助大家解决问题。异步任务简单案例...
    99+
    2023-06-27
  • springboot实现异步任务
    本文实例为大家分享了springboot实现异步任务的具体代码,供大家参考,具体内容如下 1.什么异步任务 同步:一定要等任务执行完了,得到结果,才执行下一个任务。 异步:不等任务执...
    99+
    2024-04-02
  • SpringBoot 实现异步任务
    异步任务 一、使用背景二、同步任务的优缺点2.1 优点2.2 缺点2.3 总结 三、异步任务的优缺点3.1 优点3.2 缺点3.3 总结 四、Spring Boot 实现异步任务4.0...
    99+
    2023-10-09
    spring boot java spring
  • django多线程异步任务的实现原理是什么
    Django多线程异步任务的实现原理是基于Python的内置模块`threading`和Django的任务队列模块`django-q...
    99+
    2023-09-26
    django
  • JS怎么实现异步任务队列
    本篇内容主要讲解“JS怎么实现异步任务队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现异步任务队列”吧!问题有个需求,需要实现一个异步任务队列,并...
    99+
    2024-04-02
  • golang异步任务队列怎么实现
    在Go语言中,可以使用goroutine和channel来实现异步任务队列。下面是一个简单的示例代码: package main ...
    99+
    2023-10-27
    golang
  • Django中如何使用Celery实现异步任务处理
    在Django中使用Celery实现异步任务处理需要按照以下步骤来进行: 安装Celery和Redis: pip install...
    99+
    2024-04-02
  • JavaScript事件循环同步任务与异步任务怎么实现
    这篇文章主要介绍“JavaScript事件循环同步任务与异步任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript事件循环同步任务与异步任务...
    99+
    2024-04-02
  • Flask实现异步执行任务
    Flask 是 Python 中有名的轻量级同步 web 框架,在一些开发中,可能会遇到需要长时间处理的任务,此时就需要使用异步的方式来实现,让长时间任务在后台运行,先将本次请求的响...
    99+
    2024-04-02
  • Django中如何使用django-celery完成异步任务
    这期内容当中小编将会给大家带来有关Django中如何使用django-celery完成异步任务 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Django中如何使用django-celery完成异步任务&...
    99+
    2023-06-04
  • Django celery怎么实现异步任务操作并在后台运行守护进程
    这篇文章主要介绍了Django celery怎么实现异步任务操作并在后台运行守护进程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。没废话,直接上代码。环境说明:python3...
    99+
    2023-06-14
  • golang定时任务中异步回调怎么实现
    在golang中,可以使用goroutine和channel来实现异步回调。 下面是一个示例代码: package main im...
    99+
    2023-10-22
    golang
  • Redis数据库队列怎么实现异步任务
    在Redis中实现异步任务可以通过Redis的列表数据结构来实现队列。下面是一种常见的实现方式: 生产者将需要执行的任务加入到Re...
    99+
    2024-04-22
    Redis
  • Django 中的并发请求处理:使用 Celery 实现异步任务。
    Django 中的并发请求处理:使用 Celery 实现异步任务 在现代 Web 应用程序中,处理并发请求是至关重要的。Django 是一个强大的 Web 框架,但是它并不擅长处理大量的并发请求。为了解决这个问题,我们可以使用 Celery...
    99+
    2023-08-08
    并发 apache django
  • Android中如何实现异步任务
    Android中如何实现异步任务,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。为了解决新线程不能更新UI组件的问题,Android提供了几种解决方案使用HanlderAci...
    99+
    2023-06-04
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作