摘要:前言針對高延時任務(wù)直接在一次網(wǎng)絡(luò)請求中處理完畢會導(dǎo)致很不好的體驗則可以不阻塞請求后臺處理這些任務(wù)并且可以使用的進(jìn)行數(shù)據(jù)庫操作環(huán)境其他創(chuàng)建工程此時項目結(jié)構(gòu)如下修改添加修改創(chuàng)建新創(chuàng)
前言: 針對高延時任務(wù), 直接在一次網(wǎng)絡(luò)請求中處理完畢會導(dǎo)致很不好的體驗, celery則可以不阻塞請求后臺處理這些任務(wù), 并且可以使用django的models進(jìn)行數(shù)據(jù)庫操作.環(huán)境
python models:
celery-4.1.1
redis-2.10.6
django-1.11.7
其他:
redis-3.2.9
macos
python3.6
創(chuàng)建django工程django-admin startproject dc
cd dc
django-admin startapp main
此時項目結(jié)構(gòu)如下
dc |-- __init__.py |-- main | |-- __init__.py | |-- admin.py | |-- apps.py | |-- migrations | | `-- __init__.py | |-- models.py | |-- tests.py | `-- views.py |-- settings.py |-- urls.py `-- wsgi.py
修改settings.py, 添加app
INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "dc.main" //new added ]
修改dc/main/models.py, 創(chuàng)建新models
from django.db import models # Create your models here. class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
創(chuàng)建根訪問節(jié)點
dc/main/views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. def hello(request): return HttpResponse("hello world")
dc/urls.py
urlpatterns = [ url(r"^admin/", admin.site.urls), url(r"^$", hello) //new added ]
依次執(zhí)行以下語句, 初始化django各功能模塊
python manage.py migrate python manage.py makemigrations main python manage.py sqlmigrate main 0001 python manage.py migrate
接下來python manage.py runserver, 訪問http://127.0.0.1:8000 即可看到hello world.
啟動redisredis是作為celery中間件使用的, 用來存儲消息隊列.
redis解壓后, 直接運行src/redis-server即可啟動, 默認(rèn)端口6379
配置celery參考文檔
創(chuàng)建dc/celery.py
#-*- coding:utf-8 -*- import os from celery import Celery # set the default Django settings module for the "celery" program. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dc.settings") app = Celery("dc") # Using a string here means the worker doesn"t have to serialize # the configuration object to child processes. # - namespace="CELERY" means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object("django.conf:settings", namespace="CELERY") # Load task modules from all registered Django app configs. app.autodiscover_tasks()
修改 dc/__init__.py
from .celery import app as celery_app __all__ = ["celery_app"]
修改 dc/settings.py, 設(shè)定 redis URL
CELERY_BROKER_URL = "redis://127.0.0.1:6379/3"
創(chuàng)建dc/main/tasks.py
#-*- coding:utf-8 -*- from celery import shared_task @shared_task def test(): import time time.sleep(5) from dc.main.models import Person person = Person(first_name="smith", last_name="jhon") person.save() c = Person.objects.count() print(f"person count is {c}")
修改dc/main/views.py
def hello(request): from dc.main.tasks import test test.delay() return HttpResponse("hello world")
啟動celery進(jìn)程
celery -A dc worker -l info
接下來訪問http://127.0.0.1:8000, 即可發(fā)現(xiàn)頁面立刻返回, 并沒有被time阻塞, 查看啟動celery的窗口, 即可發(fā)現(xiàn)log以及打印的信息, 確定models可以正常使用.
おわり.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41826.html
摘要:上傳文件概述當(dāng)在處理文件上傳時,文件的數(shù)據(jù)被存儲在屬性中只有在請求的方法為且提交的表單帶有屬性的情況才會包含數(shù)據(jù)。如豆瓣,防止頁面卡死。 上傳文件 概述 當(dāng)Django在處理文件上傳時,文件的數(shù)據(jù)被存儲在request.FILES屬性中 FILES只有在請求的方法為POST且提交的form表單帶有enctype=multipart/form-data屬性的情況才會包含數(shù)據(jù)。否則,F(xiàn)IL...
摘要:今天介紹一下如何在項目中使用搭建一個有兩個節(jié)點的任務(wù)隊列一個主節(jié)點一個子節(jié)點主節(jié)點發(fā)布任務(wù),子節(jié)點收到任務(wù)并執(zhí)行。 今天介紹一下如何在django項目中使用celery搭建一個有兩個節(jié)點的任務(wù)隊列(一個主節(jié)點一個子節(jié)點;主節(jié)點發(fā)布任務(wù),子節(jié)點收到任務(wù)并執(zhí)行。搭建3個或者以上的節(jié)點就類似了),使用到了celery,rabbitmq。這里不會單獨介紹celery和rabbitmq中的知識了...
摘要:介紹應(yīng)用舉例是一個基于開發(fā)的分布式異步消息任務(wù)隊列,通過它可以輕松的實現(xiàn)任務(wù)的異步處理,如果你的業(yè)務(wù)場景中需要用到異步任務(wù),就可以考慮使用你想對臺機器執(zhí)行一條批量命令,可能會花很長時間,但你不想讓你的程序等著結(jié)果返回,? celery 1.celery介紹 1.1 celery應(yīng)用舉例 Celery 是一個 基于python開發(fā)的分布式異步消息任務(wù)隊列,通過...
閱讀 1668·2021-11-12 10:35
閱讀 1614·2021-08-03 14:02
閱讀 2683·2019-08-30 15:55
閱讀 2027·2019-08-30 15:54
閱讀 757·2019-08-30 14:01
閱讀 2427·2019-08-29 17:07
閱讀 2252·2019-08-26 18:37
閱讀 3032·2019-08-26 16:51