av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Django中使用Celery的方法步驟

瀏覽:143日期:2024-09-15 13:55:26

(一)、概述

Celery是一個(gè)簡(jiǎn)單、靈活和可靠的基于多任務(wù)的分布式系統(tǒng),為運(yùn)營(yíng)提供用于維護(hù)此系統(tǒng)的工具。專注于實(shí)時(shí)處理的任務(wù)隊(duì)列,同時(shí)也支持任務(wù)的調(diào)度。執(zhí)行單元為任務(wù)(task),利用多線程這些任務(wù)可以被并發(fā)的在單個(gè)或多個(gè)職程(worker)上運(yùn)行。

Celery通過消息機(jī)制通信,通常通過中間人(broker)來分配和調(diào)節(jié)客戶端與職程服務(wù)器(worker)之間的通信。客戶端發(fā)送一條消息,中間人把消息分配給一個(gè)職程,最后由職程來負(fù)責(zé)執(zhí)行此任務(wù)。

Celery可以有多個(gè)職程和中間人,這樣提高了高可用性和橫向的擴(kuò)展能力

Celery由python語言開發(fā),但是該協(xié)議可以用任何語言拉力實(shí)現(xiàn),例如:Django中的Celery、node中的node-celery和php中的celery-php

(二)、Django中使用Celery的流程與配置

導(dǎo)入Celery:pip3 install Celery

在 與項(xiàng)目同名的目錄下 創(chuàng)建celery.py文件,特別注意:項(xiàng)目同名的目錄下

復(fù)制內(nèi)容到該文件

修改兩處內(nèi)容

os.environ.setdefault(’DJANGO_SETTINGS_MODULE’, ’proj.settings’)中的proj改為項(xiàng)目名 app = Celery(’pro’)中的pro改為項(xiàng)目名

import osfrom celery import Celery# set the default Django settings module for the ’celery’ program.os.environ.setdefault(’DJANGO_SETTINGS_MODULE’, ’proj.settings’)app = Celery(’pro’)# 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()@app.task(bind=True)def debug_task(self): print(f’Request: {self.request!r}’)

在 與項(xiàng)目同名的目錄下 的__init__.py文件中添加內(nèi)容

# 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__all__ = (’celery_app’,)

在settings.py文件中添加配置

CELERY_BROKER_URL:中間人url,可以配置redis或者RabbitMQ CELERY_RESULT_BACKEND:返回結(jié)果的存儲(chǔ)地址 CELERY_ACCEPT_CONTENT:接收內(nèi)容的格式,分為兩種:json和msgpack。msgpack比json格式的數(shù)據(jù)體積更小,傳輸速度更快。 CELERY_TASK_SERIALIZER:任務(wù)載荷的序列化方式-->json CELERY_TIMEZONE CELERY_TASK_TRACK_STARTED:是否開啟任務(wù)跟蹤 CELERY_TASK_TIME_LIMIT:任務(wù)超時(shí)限制

# Celery配置CELERY_BROKER_URL = env('CELERY_BROKER_URL')CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')CELERY_ACCEPT_CONTENT = ['json', 'msgpack']CELERY_TASK_SERIALIZER = 'json'CELERY_TIMEZONE = 'Asia/Shanghai'CELERY_TASK_TRACK_STARTED = TrueCELERY_TASK_TIME_LIMIT = 30 * 60

在app下創(chuàng)建tasks.py文件,創(chuàng)建發(fā)送消息功能,任務(wù)方法必須添加裝飾器:@shared_task

from rest_framework.response import Responsefrom rest_framework.generics import GenericAPIViewfrom time import sleepfrom celery import shared_taskclass TestView3(GenericAPIView): @classmethod @shared_task def sleep(self, duration): sleep(duration) return Response('成功', status=200)

創(chuàng)建視圖和路由

### views.pyfrom .tasks import TestView3class TestView1(GenericAPIView): def get(self, request): TestView3.sleep(10) return Response('celery實(shí)驗(yàn)成功')test_view_1 = TestView1.as_view()### urls.pyfrom django.urls import pathfrom .views import ( test_view_1)urlpatterns = [ path(’celery/’, test_view_1, name='test1')]

安裝redis并啟動(dòng)

啟動(dòng)django項(xiàng)目

使用Celery命令啟動(dòng)Celery服務(wù),命令:celery -A 項(xiàng)目名 worker -l info,如果如下所示則為啟動(dòng)成功.

celery@AppledeMacBook-Air.local v5.0.3 (singularity)Darwin-20.1.0-x86_64-i386-64bit 2020-12-05 20:52:17[config].> app: drf_email_project:0x7f84a0c4ad68.> transport: redis://127.0.0.1:6379/1%20.> results: redis://127.0.0.1:6379/2.> concurrency: 4 (prefork).> task events: OFF (enable -E to monitor tasks in this worker)[queues].> celery exchange=celery(direct) key=celery[tasks] . drf_email_project.celery.debug_task . users.tasks.sleep[2020-12-05 20:52:18,166: INFO/MainProcess] Connected to redis://127.0.0.1:6379/1%20[2020-12-05 20:52:18,179: INFO/MainProcess] mingle: searching for neighbors[2020-12-05 20:52:19,212: INFO/MainProcess] mingle: all alone[2020-12-05 20:52:19,248: WARNING/MainProcess] /Users/apple/drf-email/lib/python3.7/site-packages/celery/fixups/django.py:204: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! leak, never use this setting in production environments!’’’)[2020-12-05 20:52:19,249: INFO/MainProces

到此這篇關(guān)于Django中使用Celery的方法步驟的文章就介紹到這了,更多相關(guān)Django使用Celery的方法步驟內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 91av在线视频观看 | 三级视频网站 | 在线观看国产视频 | 日韩一区二区免费视频 | 国产成人在线观看免费 | 久久精品网 | 欧美极品在线 | 综合欧美亚洲 | 久久91精品 | 午夜影院免费体验区 | 欧美成人第一页 | 日韩欧美精品一区 | 久久性| 丝袜 亚洲 另类 欧美 综合 | 91久久久www播放日本观看 | 久久精品亚洲 | 亚洲精品一区中文字幕 | 国产一级片一区二区 | 国产亚洲日本精品 | 精品丝袜在线 | 草草影院ccyy | 日韩精品 电影一区 亚洲 | 激情久久网 | 亚洲伦理自拍 | 久久婷婷色 | 欧美一区二区三区四区五区无卡码 | 久久久久九九九女人毛片 | 范冰冰一级做a爰片久久毛片 | 日韩免费网站 | 黄视频免费观看 | 国产精品视频偷伦精品视频 | 午夜影院在线观看 | 久精品久久 | 日本电影网站 | 国产精品美女www | 天天曰天天曰 | 国产999精品久久久久久 | 色婷婷久久久亚洲一区二区三区 | 久久精品中文 | 天天拍天天草 | 亚洲www啪成人一区二区麻豆 |