日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在django中使用celery

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在django中使用celery 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言: 針對高延時任務, 直接在一次網絡請求中處理完畢會導致很不好的體驗, 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 timetime.sleep(5)from dc.main.models import Personperson = 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 testtest.delay()return HttpResponse('hello world')

啟動celery進程

celery -A dc worker -l info

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

おわり.

總結

以上是生活随笔為你收集整理的在django中使用celery的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。