<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
以前版本的 Celery 需要一個單獨的庫(django-celery)來與 Django 一起工作,但從 3.1 開始不再是這種情況。
現在支援開箱即用的 Django,因此本檔案僅包含整合 Celery 和 Django 的基本方法.
celery5.x 不支援windows平臺了。Celery 5.0.x 支援 Django 1.11 LTS 或更新版本。
Celery 5.2 版執行於
Celery 4.x 是支援 Python 2.7 的最後一個版本,
Celery 5.x 需要 Python 3.6 或更高版本。
Celery 5.1.x 還需要 Python 3.6 或更高版本。
Celery 5.2.x 需要 Python 3.7 或更新版本。
如果您執行的是舊版本的 Python,則需要執行舊版本的 Celery:
Python 2.7 或 Python 3.5:Celery 系列 4.4 或更早版本。
Python 2.6:Celery 系列 3.1 或更早版本。
Python 2.5:Celery 系列 3.0 或更早版本。
Python 2.4 是 Celery 系列 2.2 或更早版本。
Celery 是一個資金很少的專案,所以不支援 Microsoft Windows。請不要開啟與該平臺相關的任何問題。
執行系統:linux(centos/debian/ubuntu),不支援windows
Python版本:3.8.5
Django : 2.2.2
celery: 5.2.7
使用pip安裝celery5.2.7版本
pip install celery==5.2.7
要在 Django 專案中使用 Celery,您必須首先定義 Celery 庫的範例(稱為“應用程式”)
如果你有一個現代的 Django 專案佈局,比如:
- proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py
那麼推薦的方法是建立一個新的proj/proj/celery.py模組來定義 Celery 範例:
proj/proj/celery.py
檔案內容
import os from celery import Celery # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') app = Celery('proj') # 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 apps. app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print(f'Request: {self.request!r}')
然後你需要在你的proj/proj/init.py 模組中匯入這個應用程式。這可以確保在 Django 啟動時載入應用程式,以便@shared_task裝飾器(稍後提到)將使用它:
proj/proj/__init__.py
內容:
# 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',)
請注意,此範例專案佈局適用於較大的專案,對於簡單的專案,您可以使用單個包含的模組來定義應用程式和任務
讓我們分解第一個模組中發生的事情,首先,我們設定預設值DJANGO_SETTINGS_MODULEcelery命令列程式的環境變數:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
您不需要此行,但它使您不必總是將設定模組傳遞給celery程式。它必須始終在建立應用程式範例之前出現,就像我們接下來要做的那樣:
app = Celery('proj')
這是我們的庫範例,您可以有很多範例,但在使用 Django 時可能沒有理由這樣做。
我們還將 Django 設定模組新增為 Celery 的設定源。這意味著您不必使用多個組態檔,而是直接從 Django 設定中設定 Celery;但如果需要,您也可以將它們分開。
app.config_from_object('django.conf:settings', namespace='CELERY')
大寫名稱空間意味著所有 Celery 設定選項 必須以大寫而不是小寫指定,並且以 開頭 CELERY_,例如task_always_eager設定變為CELERY_TASK_ALWAYS_EAGER,broker_url 設定變為CELERY_BROKER_URL。這也適用於工作人員設定,例如,worker_concurrency 設定變為CELERY_WORKER_CONCURRENCY.
例如,一個 Django 專案的組態檔可能包括:
... # Celery Configuration Options CELERY_TIMEZONE = "Australia/Tasmania" CELERY_TASK_TRACK_STARTED = True CELERY_TASK_TIME_LIMIT = 30 * 60
您可以直接傳遞設定物件,但使用字串更好,因為這樣工作人員不必序列化物件。CELERY_名稱空間也是可選的,但建議使用(以防止與其他 Django 設定重疊)。
接下來,可重用應用程式的一個常見做法是在單獨的tasks.py模組中定義所有任務,Celery 確實有一種方法可以自動發現這些模組:
app.autodiscover_tasks()
使用上面的程式碼,Celery 將自動從您安裝的所有應用程式中發現任務,遵循tasks.py約定:
- app1/ - tasks.py - models.py - app2/ - tasks.py - models.py
這樣您就不必手動將各個模組新增到CELERY_IMPORTS設定中。
最後,該debug_task範例是一個轉儲自己的請求資訊的任務。這是使用bind=True Celery 3.1 中引入的新任務選項來輕鬆參照當前任務範例。
使用 @shared_task
裝飾器
您編寫的任務可能會存在於可重用的應用程式中,而可重用的應用程式不能依賴於專案本身,因此您也不能直接匯入您的應用程式範例。
裝飾器允許您在@shared_task沒有任何具體應用範例的情況下建立任務:
demoapp/tasks.py:
# Create your tasks here from demoapp.models import Widget from celery import shared_task @shared_task def add(x, y): return x + y @shared_task def mul(x, y): return x * y @shared_task def xsum(numbers): return sum(numbers) @shared_task def count_widgets(): return Widget.objects.count() @shared_task def rename_widget(widget_id, name): w = Widget.objects.get(id=widget_id) w.name = name w.save()
您可以在以下位置找到 Django 範例專案的完整原始碼: https ://github.com/celery/celery/tree/master/examples/django/
django-celery-results 儲存結果
django-celery-results- 使用 Django ORM/Cache 作為結果後端
django-celery-results擴充套件使用Django ORM 或 Django Cache 框架提供結果後端。
要將其用於您的專案,您需要執行以下步驟:
1.安裝django-celery-results庫:
pip install django-celery-results
2.新增django_celery_results到INSTALLED_APPS您的 Django 專案中settings.py:
INSTALLED_APPS = ( ..., 'django_celery_results', )
請注意,模組名稱中沒有破折號,只有下劃線。
3.通過執行資料庫遷移來建立 Celery 資料庫表:
python manage.py migrate django_celery_results
4.設定 Celery 以使用django-celery-results後端。
假設您使用 Djangosettings.py來設定 Celery,新增以下設定
CELERY_RESULT_BACKEND = 'django-db'
對於快取後端,您可以使用:
CELERY_CACHE_BACKEND = 'django-cache'
我們也可以使用 django 的 CACHES 設定中定義的快取。
# celery setting. CELERY_CACHE_BACKEND = 'default' # django setting. CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', } }
有關其他設定選項,請檢視 任務結果後端https://docs.celeryq.dev/en/stable/userguide/configuration.html設定參考。
django-celery-beat- 具有管理介面的資料庫支援的定期任務。 詳細資料參考https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html
在生產環境中,您將希望在後臺將工作程式作為守護程式執行 - 請參閱守護程式-但對於測試和開發,能夠使用 celery worker manage 命令啟動工作程式範例很有用,就像您一樣d 使用 Django 的 manage.py runserver:
celery -A proj worker -l INFO
有關可用命令列選項的完整列表,請使用幫助命令:
celery help
到此這篇關於python3.8+django2+celery5.2.7環境準備的文章就介紹到這了,更多相關python3.8+django2+celery5.2.7環境內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45