中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何進(jìn)行DjangoCelery分析

本篇文章為大家展示了如何進(jìn)行Django Celery分析,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、小程序開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立10多年以來,已經(jīng)為成百上千家地磅秤各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的成百上千家客戶與我們一路同行,見證我們的成長(zhǎng);未來,我們一起分享成功的喜悅。

對(duì)于任務(wù)調(diào)度的實(shí)現(xiàn)方案,其實(shí)開源的項(xiàng)目有很多。

我先說說對(duì)于任務(wù)調(diào)度的認(rèn)識(shí),如果從數(shù)據(jù)庫(kù)層面來說,任務(wù)調(diào)度就是scheduler,這一點(diǎn)在Oracle中體現(xiàn)的更為細(xì)致。

Oracle中創(chuàng)建scheduler,在后臺(tái)運(yùn)行JOB完成數(shù)據(jù)的處理,基本上會(huì)把一個(gè)任務(wù)拆分成不同的幾個(gè)維度屬性。

如果任務(wù)很多,有大批量的任務(wù)需要處理,而且任務(wù)位于不同的服務(wù)器環(huán)境中,那么這個(gè)復(fù)雜度就會(huì)大大增加,所以引入消息隊(duì)列的方式就是一個(gè)很自然的方式。

消息隊(duì)列目前有很多種可選方案,比如redis,RabbitMQ等,根據(jù)自己的需求滿足要求即可。

首先我們需要確認(rèn)celery已正常安裝。

>pip list|grep celery

celery (3.1.20)

celery-with-redis (3.0)

django-celery (3.2.2)

如果是在Django中在較新的版本中,也是自帶的,我們來快速體驗(yàn)一下Django Celery的功能。

創(chuàng)建一個(gè)項(xiàng)目

django-admin startproject django_celery

初始化一個(gè)應(yīng)用

cd django_celery

django-admin startapp celery_app

我們修改settings.py的配置。

在這里需要說明的是,如果我們不用Redis,RabbitMQ的話,測(cè)試使用自帶的broker服務(wù)也是可以的。

如果啟用自帶的配置,settings.py的配置如下:

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'celery_app',

'djcelery',

'kombu.transport.django',

)

BROKER_URL = 'django://localhost:8000//'

如果是用RabbitMQ,我們需要單獨(dú)部署安裝這個(gè)消息隊(duì)列,可用

yum install rabbitmq-server即可,本身這個(gè)項(xiàng)目是用erlang開發(fā)的,所以會(huì)安裝大量的erlang相關(guān)的包。

如何進(jìn)行Django Celery分析

settings.py的配置如下:

import djcelery

djcelery.setup_loader()

BROKER_URL= 'amqp://guest@localhost//'

CELERY_RESULT_BACKEND = 'amqp://guest@localhost//'

# Application definition

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'celery_app',

'djcelery',

'kombu.transport.django',

)

然后我們配置任務(wù)的信息,在django-celery項(xiàng)目目錄下,創(chuàng)建文件celery.py

from __future__ import absolute_import

import os

from celery import Celery

from django.conf import settings

# set the default Django settings module for the 'celery' program.

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_celery.settings')

app = Celery('django_celery')

# Using a string here means the worker will not have to

# pickle the object when using Windows.

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

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)

def debug_task(self):

print('Request: {0!r}'.format(self.request))

在應(yīng)用celery_app的目錄下,創(chuàng)建任務(wù)tasks.py,我們定義了幾個(gè)方法供調(diào)用。

from __future__ import absolute_import

from celery import shared_task

import time

@shared_task

def add(x, y):

return x + y

@shared_task

def mul(x, y):

time.sleep(10)

return x * y

@shared_task

def xsum(numbers):

time.sleep(10)

return sum(numbers)

基礎(chǔ)配置完成后,我們來試用一下。

然后配置DB的信息,使用命令

python manage.py syncdb

這個(gè)過程會(huì)提示你創(chuàng)建一個(gè)超級(jí)用戶,照做就可以了。

啟動(dòng)服務(wù)

python manage.py runserver

然后打開另外一個(gè)窗口,啟動(dòng)celery的服務(wù)

python manage.py celery worker -l info

這個(gè)過程很可能會(huì)跑出警告:

root@localhost django_celery]# python manage.py celery worker -l info

Running a worker with superuser privileges when the

worker accepts messages serialized with pickle is a very bad idea!

If you really want to continue then you have to set the C_FORCE_ROOT

environment variable (but please think about this before you do).

User information: uid=0 euid=0 gid=0 egid=0

其實(shí)這個(gè)意思很明確,如果確認(rèn)需要,要設(shè)置變量C_FORCE_ROOT,風(fēng)格和sandbox很類似。

export C_FORCE_ROOT=test

>python manage.py celery worker -l info

可以從啟動(dòng)日志看到task的信息:

[tasks]

. celery_app.tasks.add

. celery_app.tasks.mul

. celery_app.tasks.xsum

. django_celery.celery.debug_task

再次開啟一個(gè)新的會(huì)話,這算是會(huì)話3,我們開啟shell交互窗口。

>>> from celery_app.tasks import *

>>> dir()

['__builtins__', 'absolute_import', 'add', 'mul', 'shared_task', 'xsum']

>>> mul(5,2)

10

這個(gè)時(shí)候如果使用delay,add的方式,就會(huì)進(jìn)入消息隊(duì)列。

>>> mul.delay(5,2)

<AsyncResult: 7d647a77-8344-4813-bc15-791ed1a8c3d3>

>>>

>>> add.delay(2,3)

<AsyncResult: 0408ed38-7537-458f-87de-8cae058123e2>

>>>

查看worker的日志信息如下:

[2018-01-08 14:34:47,505: INFO/MainProcess] Received task: celery_app.tasks.add[bac53d49-24cf-4d07-8515-8eff8083cab9]

[2018-01-08 14:34:47,507: INFO/MainProcess] Task celery_app.tasks.add[bac53d49-24cf-4d07-8515-8eff8083cab9] succeeded in 0.0008037839998s: 6

使用RabbitMQ的日志是類似的。

如果要啟用flower界面,也是分分鐘搞定。

安裝flower:

pip install flower

啟動(dòng)服務(wù)

python manage.py celery flower

訪問端口:

http://127.0.0.1:5555/

上述內(nèi)容就是如何進(jìn)行Django Celery分析,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:如何進(jìn)行DjangoCelery分析
路徑分享:http://www.rwnh.cn/article16/jgpedg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)公司、定制開發(fā)、做網(wǎng)站、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
府谷县| 泽州县| 昌江| 江孜县| 大邑县| 汨罗市| 惠东县| 南皮县| 巴林右旗| 桃江县| 吉林省| 海南省| 常山县| 兴义市| 巢湖市| 建始县| 故城县| 胶南市| 陇川县| 科技| 嘉祥县| 象州县| 绥宁县| 凤翔县| 客服| 青海省| 紫金县| 手机| 黑河市| 高台县| 友谊县| 永川市| 江陵县| 临洮县| 寿光市| 铁力市| 克拉玛依市| 湟源县| 夏河县| 湘潭市| 呼图壁县|