1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Django如何配置celery執(zhí)行異步任務(wù)和定時任務(wù)-創(chuàng)新互聯(lián)

      這篇文章主要介紹了Django如何配置celery執(zhí)行異步任務(wù)和定時任務(wù),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

      成都創(chuàng)新互聯(lián)公司"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!成都創(chuàng)新互聯(lián)公司具備承接各種類型的網(wǎng)站設(shè)計、網(wǎng)站建設(shè)項目的能力。經(jīng)過十載的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評。

      celery是一個基于python開發(fā)的簡單、靈活且可靠的分布式任務(wù)隊列框架,支持使用任務(wù)隊列的方式在分布式的機(jī)器/進(jìn)程/線程上執(zhí)行任務(wù)調(diào)度。采用典型的生產(chǎn)者-消費(fèi)者模型,主要由三部分組成:

      • 消息隊列broker:broker實際上就是一個MQ隊列服務(wù),可以使用redis、rabbitmq等作為broker

      • 處理任務(wù)的消費(fèi)者workers:broker通知worker隊列中有任務(wù),worker去隊列中取出任務(wù)執(zhí)行,每一個worker就是一個進(jìn)程

      • 存儲結(jié)果的backend:執(zhí)行結(jié)果存儲在backend,默認(rèn)也會存儲在broker使用的MQ隊列服務(wù)中,也可以單獨(dú)配置用何種服務(wù)做backend

      Django如何配置celery執(zhí)行異步任務(wù)和定時任務(wù)

      異步任務(wù)

      我的異步使用場景為項目上線:前端web上有個上線按鈕,點(diǎn)擊按鈕后發(fā)請求給后端,后端執(zhí)行上線過程要5分鐘,后端在接收到請求后把任務(wù)放入隊列異步執(zhí)行,同時馬上返回給前端一個任務(wù)執(zhí)行中的結(jié)果。若果沒有異步執(zhí)行會怎么樣呢?同步的情況就是執(zhí)行過程中前端一直在等后端返回結(jié)果,頁面轉(zhuǎn)呀轉(zhuǎn)的就轉(zhuǎn)超時了。

      異步任務(wù)配置

      1.安裝rabbitmq,這里我們使用rabbitmq作為broker,安裝完成后默認(rèn)啟動了,也不需要其他任何配置

      # apt-get install rabbitmq-server

      2.安裝celery

      # pip3 install celery

      3.celery用在django項目中,django項目目錄結(jié)構(gòu)(簡化)如下

      website/
      |-- deploy
      |  |-- admin.py
      |  |-- apps.py
      |  |-- __init__.py
      |  |-- models.py
      |  |-- tasks.py
      |  |-- tests.py
      |  |-- urls.py
      |  `-- views.py
      |-- manage.py
      |-- README
      `-- website
        |-- celery.py
        |-- __init__.py
        |-- settings.py
        |-- urls.py
        `-- wsgi.py

      4.創(chuàng)建 website/celery.py 主文件

      from __future__ import absolute_import, unicode_literals
      import os
      from celery import Celery, platforms
      
      # set the default Django settings module for the 'celery' program.
      os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'website.settings')
      
      app = Celery('website')
      
      # Using a string here means the worker don'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()
      
      # 允許root 用戶運(yùn)行celery
      platforms.C_FORCE_ROOT = True
      
      @app.task(bind=True)
      def debug_task(self):
        print('Request: {0!r}'.format(self.request))

      5.在 website/__init__.py 文件中增加如下內(nèi)容,確保django啟動的時候這個app能夠被加載到

      from __future__ import absolute_import
      
      # 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']

      6.各應(yīng)用創(chuàng)建tasks.py文件,這里為 deploy/tasks.py

      from __future__ import absolute_import
      from celery import shared_task
      
      @shared_task
      def add(x, y):
        return x + y

      注意tasks.py必須建在各app的根目錄下,且只能叫tasks.py,不能隨意命名

      7.views.py中引用使用這個tasks異步處理

      from deploy.tasks import add
      
      def post(request):
        result = add.delay(2, 3)
      result.ready()
      result.get(timeout=1)
      result.traceback

      8.啟動celery

      # celery -A website worker -l info

      9.這樣在調(diào)用post這個方法時,里邊的add就可以異步處理了

      定時任務(wù)

      定時任務(wù)的使用場景就很普遍了,比如我需要定時發(fā)送報告給老板~

      定時任務(wù)配置

      1. website/celery.py 文件添加如下配置以支持定時任務(wù)crontab

      from celery.schedules import crontab
      
      app.conf.update(
        CELERYBEAT_SCHEDULE = {
          'sum-task': {
            'task': 'deploy.tasks.add',
            'schedule': timedelta(seconds=20),
            'args': (5, 6)
          }
          'send-report': {
            'task': 'deploy.tasks.report',
            'schedule': crontab(hour=4, minute=30, day_of_week=1),
          }
        }
      )

      定義了兩個task:

      • 名字為'sum-task'的task,每20秒執(zhí)行一次add函數(shù),并傳了兩個參數(shù)5和6

      • 名字為'send-report'的task,每周一早上4:30執(zhí)行report函數(shù)

      timedelta是datetime中的一個對象,需要 from datetime import timedelta 引入,有如下幾個參數(shù)

      • days

      • seconds

      • microseconds

      • milliseconds

      • minutes

      • hours

      crontab的參數(shù)有:

      month_of_year
      day_of_month
      day_of_week
      hour
      minute

      2. deploy/tasks.py 文件添加report方法:

      @shared_task
      def report():
        return 5

      3.啟動celery beat,celery啟動了一個beat進(jìn)程一直在不斷的判斷是否有任務(wù)需要執(zhí)行

      # celery -A website beat -l info

      Tips

      1.如果你同時使用了異步任務(wù)和計劃任務(wù),有一種更簡單的啟動方式 celery -A website worker -b -l info ,可同時啟動worker和beat

      2.如果使用的不是rabbitmq做隊列那么需要在主配置文件中 website/celery.py 配置broker和backend,如下:

      # redis做MQ配置
      app = Celery('website', backend='redis', broker='redis://localhost')
      # rabbitmq做MQ配置
      app = Celery('website', backend='amqp', broker='amqp://admin:admin@localhost')

      3.celery不能用root用戶啟動的話需要在主配置文件中添加 platforms.C_FORCE_ROOT = True

      4.celery在長時間運(yùn)行后可能出現(xiàn)內(nèi)存泄漏,需要添加配置 CELERYD_MAX_TASKS_PER_CHILD = 10 ,表示每個worker執(zhí)行了多少個任務(wù)就死掉

      感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Django如何配置celery執(zhí)行異步任務(wù)和定時任務(wù)”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


      當(dāng)前標(biāo)題:Django如何配置celery執(zhí)行異步任務(wù)和定時任務(wù)-創(chuàng)新互聯(lián)
      鏈接地址:http://www.ef60e0e.cn/article/djhgoo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        辛集市| 哈密市| 江山市| 浠水县| 永仁县| 英山县| 松江区| 罗江县| 新田县| 当雄县| 三原县| 双鸭山市| 东兰县| 冕宁县| 镇巴县| 会同县| 恩施市| 金山区| 赣州市| 武川县| 常宁市| 大渡口区| 平果县| 亳州市| 班戈县| 樟树市| 定兴县| 古丈县| 禄劝| 沧源| 濉溪县| 永宁县| 芮城县| 湖州市| 庆城县| 泸溪县| 定陶县| 运城市| 清远市| 峨眉山市| 怀来县|