最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用celery和Django處理異步任務(wù)的流程分析

 更新時間:2020年02月19日 09:46:13   作者:mindg.cn  
Celery是 一個專注于實時處理的任務(wù)隊列,它還支持任務(wù)調(diào)度。 Celery快速,簡單,高度可用且靈活。這篇文章主要介紹了使用celery和Django處理異步任務(wù)的流程分析,需要的朋友可以參考下

介紹

我們可能需要一些可以安排一些任務(wù)并定期運(yùn)行一些任務(wù)或異步處理長任務(wù)的東西,而這一切都可以通過在Django Project中使用Celery來實現(xiàn)。

什么是Celery?

Celery是 一個專注于實時處理的任務(wù)隊列,它還支持任務(wù)調(diào)度。 Celery快速,簡單,高度可用且靈活。

Celery需要消息傳輸來發(fā)送和接收消息,這可以由Redis或RabbitMQ完成。

入門

讓我們開始在您的virtualenv中安裝Celery軟件包。

安裝Celery

<span class="nv">$ </span>pip <span class="nb">install </span>celery
pip install celery

安裝Redis

我們將Message Broker用作Redis,所以我們安裝

Linux / Mac用戶

您可以從這里下載最新版本

$ wget http://download.redis.io/releases/redis-4.0.8.tar.gz
$ tar xzf redis-4.0.8.tar.gz
$ cd redis-4.0.8
$make

Windows用戶

對于Windows用戶,您可以從此處獲取redis的可執(zhí)行文件。

安裝后,請嘗試是否正確安裝。

$ redis-cli ping

它應(yīng)該顯示:

pong

同時安裝redis的python包

$ pip install redis

Django的第一步

現(xiàn)在您已經(jīng)成功安裝了軟件包,現(xiàn)在就開始學(xué)習(xí)Django Project

settings.py Add some of the setting configuration in your settings.py CELERY_BROKER_URL = 'redis://localhost:6379' CELERY_RESULT_BACKEND = 'redis://localhost:6379' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_TIMEZONE = "YOUR_TIMEZONE"

確保您已從YOUR_TIMEZONE更改時區(qū)。 您可以從這里獲取時區(qū)

主Django項目目錄中創(chuàng)建celery.py文件

- src/ - manage.py - celery_project/ - __init__.py - settings.py - urls.py - celery.py celery_project/celery.py

在celery.py模塊中添加以下代碼。 該模塊用于定義celery實例。

確保已使用django項目名稱更改了項目名稱(<your project name>)

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your project name>.settings')
app = Celery('<your project name>')
# 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('Request: {0!r}'.format(self.request))
celery_project/__init__.py

然后,我們需要將定義celery.py的應(yīng)用程序?qū)氲街黜椖磕夸浀腳_init__.py。 這樣,我們可以確保在Django項目啟動時已加載應(yīng)用

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

創(chuàng)建任務(wù)

現(xiàn)在創(chuàng)建一些任務(wù)

在您在INSTALLED_APPS中注冊的任何應(yīng)用程序中創(chuàng)建一個新文件

my_app/tasks.py
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task(name = "print_msg_with_name")
def print_message(name, *args, **kwargs):
 print("Celery is working!! {} have implemented it correctly.".format(name))
@shared_task(name = "add_2_numbers")
def add(x, y):
 print("Add function has been called!! with params {}, {}".format(x, y))
 return x+y

開始程序

打開一個NEW終端并運(yùn)行以下命令以運(yùn)行celery的worker實例,并將目錄更改為您的主項目目錄所在的位置,即,將manage.py文件放置的目錄,并確保您已經(jīng) 激活您的virtualenv(如果已創(chuàng)建)。

用您的項目名稱更改項目名稱

$ celery -A <your project name> worker -l info

輸出:

-------------- celery@root v4.1.0 (latentcall) ---- **** ----- --- * *** * -- Linux-4.13.0-32-generic-x86_64-with-Ubuntu-17.10-artful 2018-02-17 08:09:37 -- * - **** --- - ** ---------- [config] - ** ---------- .> app: celery_project:0x7f9039886400 - ** ---------- .> transport: redis://localhost:6379// - ** ---------- .> results: redis://localhost:6379/ - *** --- * --- .> concurrency: 4 (prefork) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . add_2_numbers . celery_project.celery.debug_task . print_msg_with_name [2018-02-17 08:09:37,877: INFO/MainProcess] Connected to redis://localhost:6379// [2018-02-17 08:09:37,987: INFO/MainProcess] mingle: searching for neighbors [2018-02-17 08:09:39,084: INFO/MainProcess] mingle: all alone [2018-02-17 08:09:39,121: WARNING/MainProcess] /home/jai/Desktop/demo/lib/python3.6/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! warnings.warn('Using settings.DEBUG leads to a memory leak, never ' [2018-02-17 08:09:39,121: INFO/MainProcess] celery@root ready.

注意:檢查上面的[tasks],它應(yīng)該包含您在task.py模塊中創(chuàng)建的任務(wù)的名稱。

有關(guān)更多信息和日志,您還可以在DEBUG MODE中運(yùn)行worker實例

celery <span class="nt">-A</span> <your project name> worker <span class="nt">-l</span> info <span class="nt">--loglevel</span><span class="o">=</span>DEBUG celery -A <your project name> worker -l info --loglevel=DEBUG

注意:請勿關(guān)閉此終端,應(yīng)保持打開狀態(tài)!!

測試任務(wù)

現(xiàn)在讓我們從django shell運(yùn)行任務(wù)打開Django shell

$ python3 manage.py shell

用delay方法運(yùn)行函數(shù):

>>> from my_app.tasks import print_message, add
>>> print_message.delay("Jai Singhal")
<AsyncResult: fe4f9787-9ee4-46da-856c-453d36556760>
>>> add.delay(10, 20)
<AsyncResult: ca5d2c50-87bc-4e87-92ad-99d6d9704c30>

當(dāng)檢查您的celery worker實例正在運(yùn)行的第二個終端時,您將獲得此類型的輸出,顯示您的任務(wù)已收到且任務(wù)已成功完成

[2018-02-17 08:12:14,375: INFO/MainProcess] Received task: my_app.tasks.print_message[fe4f9787-9ee4-46da-856c-453d36556760] [2018-02-17 08:12:14,377: WARNING/ForkPoolWorker-4] Celery is working!! Jai Singhal have implemented it correctly. [2018-02-17 08:12:14,382: INFO/ForkPoolWorker-4] Task my_app.tasks.print_message[fe4f9787-9ee4-46da-856c-453d36556760] succeeded in 0.004476275000342866s: None [2018-02-17 08:12:28,344: INFO/MainProcess] Received task: my_app.tasks.add[ca5d2c50-87bc-4e87-92ad-99d6d9704c30] [2018-02-17 08:12:28,349: WARNING/ForkPoolWorker-3] Add function has been called!! with params 10, 20 [2018-02-17 08:12:28,358: INFO/ForkPoolWorker-3] Task my_app.tasks.add[ca5d2c50-87bc-4e87-92ad-99d6d9704c30] succeeded in 0.010077004999857309s: 30

總結(jié)

以上所述是小編給大家介紹的使用celery和Django處理異步任務(wù)的流程分析,希望對大家有所幫助,也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 使用Python給PDF添加文本超鏈接和圖片超鏈接

    使用Python給PDF添加文本超鏈接和圖片超鏈接

    超鏈接是指向特定資源的鏈接,作為一種有效的導(dǎo)航工具,它能夠幫助讀者快速訪問相關(guān)信息,通過在PDF文檔中添加文本超鏈接和圖片超鏈接,你可以顯著提升文檔的互動性和用戶體驗,這篇文章將詳細(xì)介紹如何使用Python給PDF添加文本超鏈接和圖片超鏈接,需要的朋友可以參考下
    2025-03-03
  • Python中chinesecalendar簡介、安裝、使用方法詳細(xì)講解

    Python中chinesecalendar簡介、安裝、使用方法詳細(xì)講解

    這篇文章主要介紹了Python中chinesecalendar簡介、安裝、使用方法詳細(xì)講解,該庫是判斷某年某月某一天是不是工作日/節(jié)假日。 支持 2004年 至 2023年,包括 2020年 的春節(jié)延長,需要的朋友可以參考下
    2023-03-03
  • 4款Python 類型檢查工具,你選擇哪個呢?

    4款Python 類型檢查工具,你選擇哪個呢?

    這篇文章主要介紹了4款Python 類型檢查工具的相關(guān)資料,幫助是及早檢查,提前發(fā)現(xiàn)類型的錯誤,增強(qiáng)代碼的一致性與可維護(hù)性。(還有防止脫發(fā),喵),感興趣的朋友可以了解下
    2020-10-10
  • python中的關(guān)鍵字(pass)使用

    python中的關(guān)鍵字(pass)使用

    這篇文章主要介紹了python中的關(guān)鍵字(pass)使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • python如何保存文本文件

    python如何保存文本文件

    在本篇文章中小編給大家分享的是關(guān)于python保存文本文件的方法,有需要的朋友們可以參考下。
    2020-06-06
  • Python logging模塊寫入中文出現(xiàn)亂碼

    Python logging模塊寫入中文出現(xiàn)亂碼

    這篇文章主要介紹了Python logging模塊寫入中文出現(xiàn)亂碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 一文詳解python多繼承的3C算法

    一文詳解python多繼承的3C算法

    有很多地方都說python多繼承的繼承順序,是按照深度遍歷的方式,其實python多繼承順序的算法,不是嚴(yán)格意義上的深度遍歷,而是基于深度遍歷基礎(chǔ)上優(yōu)化出一種叫3C算法,本文將給大家詳細(xì)的介紹一下python多繼承的3C算法,需要的朋友可以參考下
    2024-07-07
  • Anaconda和Pycharm的安裝配置教程分享

    Anaconda和Pycharm的安裝配置教程分享

    這篇文章主要介紹了Anaconda和Pycharm的安裝配置教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python 短視頻爬蟲教程

    Python 短視頻爬蟲教程

    今天給大家?guī)硪黄老x小教程,很簡單的幾十行代碼就可以實現(xiàn)了,爬取的目標(biāo)是短視頻,感興趣的同學(xué)快來跟著小編往下看吧
    2021-11-11
  • Python基于回溯法子集樹模板解決m著色問題示例

    Python基于回溯法子集樹模板解決m著色問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決m著色問題,簡單描述了m著色問題并結(jié)合實例形式分析了Python使用回溯法子集樹模板解決m著色問題的具體步驟與相關(guān)操作注意事項,需要的朋友可以參考下
    2017-09-09

最新評論

元谋县| 布尔津县| 阳曲县| 榆中县| 德惠市| 桦川县| 丹阳市| 鄂托克旗| 白银市| 乐清市| 呼伦贝尔市| 神农架林区| 八宿县| 宁乡县| 文水县| 班戈县| 商城县| 崇礼县| 友谊县| 华阴市| 拉孜县| 克什克腾旗| 新乐市| 利川市| 汶上县| 阜宁县| 福泉市| 高州市| 南陵县| 赫章县| 阿鲁科尔沁旗| 扎囊县| 图们市| 托克逊县| 历史| 安庆市| 邵东县| 兴化市| 西华县| 喀什市| 宁远县|