国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在django中使用celery

meislzhua / 2279人閱讀

摘要:前言針對高延時任務直接在一次網絡請求中處理完畢會導致很不好的體驗則可以不阻塞請求后臺處理這些任務并且可以使用的進行數據庫操作環境其他創建工程此時項目結構如下修改添加修改創建新創

前言: 針對高延時任務, 直接在一次網絡請求中處理完畢會導致很不好的體驗, celery則可以不阻塞請求后臺處理這些任務, 并且可以使用django的models進行數據庫操作.
環境

python models:

celery-4.1.1

redis-2.10.6

django-1.11.7

其他:

redis-3.2.9

macos

python3.6

創建django工程

django-admin startproject dc
cd dc
django-admin startapp main

此時項目結構如下

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, 創建新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)

創建根訪問節點

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
]

依次執行以下語句, 初始化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.

啟動redis

redis是作為celery中間件使用的, 用來存儲消息隊列.

redis解壓后, 直接運行src/redis-server即可啟動, 默認端口6379

配置celery

參考文檔

創建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, 設定 redis URL

CELERY_BROKER_URL = "redis://127.0.0.1:6379/3"

創建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進程

celery -A dc worker -l info

接下來訪問http://127.0.0.1:8000, 即可發現頁面立刻返回, 并沒有被time阻塞, 查看啟動celery的窗口, 即可發現log以及打印的信息, 確定models可以正常使用.

おわり.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41826.html

相關文章

  • 7-django——文件上傳_分頁_ajax_富文本_celery

    摘要:上傳文件概述當在處理文件上傳時,文件的數據被存儲在屬性中只有在請求的方法為且提交的表單帶有屬性的情況才會包含數據。如豆瓣,防止頁面卡死。 上傳文件 概述 當Django在處理文件上傳時,文件的數據被存儲在request.FILES屬性中 FILES只有在請求的方法為POST且提交的form表單帶有enctype=multipart/form-data屬性的情況才會包含數據。否則,FIL...

    lylwyy2016 評論0 收藏0
  • django開發-使用celery搭建分布式(多節點)任務隊列

    摘要:今天介紹一下如何在項目中使用搭建一個有兩個節點的任務隊列一個主節點一個子節點主節點發布任務,子節點收到任務并執行。 今天介紹一下如何在django項目中使用celery搭建一個有兩個節點的任務隊列(一個主節點一個子節點;主節點發布任務,子節點收到任務并執行。搭建3個或者以上的節點就類似了),使用到了celery,rabbitmq。這里不會單獨介紹celery和rabbitmq中的知識了...

    ConardLi 評論0 收藏0
  • Django使用celery 異步發送短信驗證碼

    摘要:介紹應用舉例是一個基于開發的分布式異步消息任務隊列,通過它可以輕松的實現任務的異步處理,如果你的業務場景中需要用到異步任務,就可以考慮使用你想對臺機器執行一條批量命令,可能會花很長時間,但你不想讓你的程序等著結果返回,? celery 1.celery介紹 1.1 celery應用舉例 Celery 是一個 基于python開發的分布式異步消息任務隊列,通過...

    everfly 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<