国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django中使用Celery的方法示例

2020-01-04 13:59:00
字體:
來源:轉載
供稿:網友

起步

在 《分布式任務隊列Celery使用說明》 中介紹了在 Python 中使用 Celery 來實驗異步任務和定時任務功能。本文介紹如何在 Django 中使用 Celery。

安裝

pip install django-celery

這個命令使用的依賴是 Celery 3.x 的版本,所以會把我之前安裝的 4.x 卸載,不過對功能上并沒有什么影響。我們也完全可以僅用Celery在django中使用,但使用 django-celery 模塊能更好的管理 celery。

使用

可以把有關 Celery 的配置放到 settings.py 里去,但我比較習慣單獨一個文件來放,然后在 settings.py 引入進來:

# celery_config.pyimport djceleryimport osos.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')djcelery.setup_loader()BROKER_URL = 'redis://127.0.0.1:6379/1'CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'# UTCCELERY_ENABLE_UTC = TrueCELERY_TIMEZONE = 'Asia/Shanghai'CELERY_IMPORTS = ( 'app.tasks',)# 有些情況可以防止死鎖CELERY_FORCE_EXECV = True# 設置并發的worker數量CELERYD_CONCURRENCY = 4# 任務發送完成是否需要確認,這一項對性能有一點影響CELERY_ACKS_LATE = True# 每個worker執行了多少任務就會銷毀,防止內存泄露,默認是無限的CELERYD_MAX_TASKS_PER_CHILD = 40# 規定完成任務的時間CELERYD_TASK_TIME_LIMIT = 15 * 60 # 在15分鐘內完成任務,否則執行該任務的worker將被殺死,任務移交給父進程# 設置默認的隊列名稱,如果一個消息不符合其他的隊列就會放在默認隊列里面,如果什么都不設置的話,數據都會發送到默認的隊列中CELERY_DEFAULT_QUEUE = "default"# 設置詳細的隊列CELERY_QUEUES = { "default": { # 這是上面指定的默認隊列  "exchange": "default",  "exchange_type": "direct",  "routing_key": "default" }, "beat_queue": {  "exchange": "beat_queue",  "exchange_type": "direct",  "routing_key": "beat_queue" }}

配置文件中設置了 CELERY_IMPORTS 導入的任務,所以在django app中創建相應的任務文件:

# app/tasks.pyfrom celery.task import Taskimport timeclass TestTask(Task): name = 'test-task' # 給任務設置個自定義名稱 def run(self, *args, **kwargs):  print('start test task')  time.sleep(4)  print('args={}, kwargs={}'.format(args, kwargs))  print('end test task')

在 settings.py 添加:

INSTALLED_APPS = [ # ... 'djcelery',]# Celeryfrom learn_django.celery_config import *

觸發任務或提交任務可以在view中來調用:

# views.pyfrom django.http import HttpResponsefrom app.tasks import TestTaskdef test_task(request): # 執行異步任務 print('start do request') t = TestTask() t.delay() print('end do request') return HttpResponse('ok')

啟動 woker 的命令是:

python manage.py celery worker -l info

再啟動django,訪問該view,可以看到任務在worker中被消費了。

定時任務

在celery的配置文件 celery_config.py 文件中添加:

CELERYBEAT_SCHEDULE = { 'task1-every-1-min': { # 自定義名稱  'task': 'test-task', # 與任務中name名稱一致  'schedule': datetime.timedelta(seconds=5),  'args': (2, 15),  'options': {   'queue': 'beat_queue', # 指定要使用的隊列  } },}

通過 options 的 queque 來指定要使用的隊列,這里需要單獨的隊列是因為,如果所有任務都使用同一隊列,對于定時任務來說,任務提交后會位于隊列尾部,任務的執行時間會靠后,所以對于定時任務來說,使用單獨的隊列。

啟動 beat:

python manage.py celery beat -l info

監控工具 flower

如果celery中的任務執行失敗了,有些場景是需要對這些任務進行監控, flower 是基于 Tornado 開發的web應用。安裝用 pip install flower ;啟動它可以是:

python manage.py celery flower# python manage.py celery flower --basic_auth=admin:admin

用瀏覽器訪問 http://localhost:5555 即可查看:

Django,Celery

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 基隆市| 正阳县| 浮山县| 容城县| 凉城县| 卢氏县| 中卫市| 乡城县| 视频| 峨山| 革吉县| 高陵县| 雷波县| 永丰县| 广西| 县级市| 灵丘县| 阳原县| 睢宁县| 巴东县| 赤峰市| 宣城市| 刚察县| 明星| 清原| 乌审旗| 福建省| 基隆市| 蒙自县| 九寨沟县| 永丰县| 花莲市| 桂东县| 乌兰察布市| 康定县| 三都| 锡林浩特市| 六安市| 牙克石市| 仙居县| 固阳县|