您好,登錄后才能下訂單哦!
這篇文章主要講解了“python測試開發django實例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python測試開發django實例分析”吧!
Celery 5.2 版運行于
Python?3.7、3.8、3.9、3.10?
PyPy3.7、3.8 ?7.3.7?
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-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', } }
django-celery-beat- 具有管理界面的數據庫支持的定期任務。
在生產環境中,您將希望在后臺將工作程序作為守護程序運行 - 請參閱守護程序-但對于測試和開發,能夠使用 celery worker manage 命令啟動工作程序實例很有用,就像您一樣d 使用 Django 的 manage.py runserver:
celery -A proj worker -l INFO
有關可用命令行選項的完整列表,請使用幫助命令:
celery help
感謝各位的閱讀,以上就是“python測試開發django實例分析”的內容了,經過本文的學習后,相信大家對python測試開發django實例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。