使用Celery實現定時任務功能

2021-10-01 19:02:44 字數 2165 閱讀 8569

python實現定時任務的方式有很多,如使用celery、schedule模組、threading模組中的timer、sched模組、定時框架apscheduler,都各有特色。在多次對比之後,我決定使用celery,下面我們介紹一下如何使用celery。

首先安裝celery

pip install django

pip install celery

pip install django_celery_beat

pip install mysqlclient

安裝rabbitmq(可以使用redis代替)

brew install rabbitmq
安裝完成之後啟動服務

brew services start rabbitmq
初始化專案

django-admin startproject pystudy
修改django配置

# 整合django_celery_beat[.

..,'django_celery_beat'

]# 修改預設時區以及語言

language_code =

'zh-hans'

time_zone =

'asia/shanghai'

新增celery.py檔案,內容如下

from celery import celery

from celery.schedules import crontab

broker =

'amqp://guest@localhost//'

'test'

, broker=broker)

# 初始化任務,不是必須的,如果要新增自己的任務,可以在django的admin頁面新增任務

defsetup_periodic_tasks

(sender,

**kwargs)

:# 週期性任務

sender.add_periodic_task(

3, test.s(

'hello world'

), name=

'3秒一次'

)# 定時任務, 每週五的17點30分執行一次

sender.add_periodic_task(

crontab(hour=

17, minute=

30, day_of_week=5)

, test.s(

'下班嘍,又休息兩天!'),

)

deftest

(arg)

:print

(arg)

目錄結構

├── manage.py

└── pystudy

├── init.py

├── celery.py

├── settings.py

└── urls.py

設定環境變數

export django_settings_module=pystudy.settings
執行任務排程器

celery -a pystudy beat -l info --scheduler django_celery_beat.schedulers:databasescheduler
執行結果截圖

執行任務執行單元

celery -a pystudy worker --loglevel=info
執行結果截圖

執行django,可以在admin頁面檢視資料庫表中的資料

python manage.py runserver
以上是簡單的實現,如果要在專案中用的話,需要根據業務去擴充套件。

Celery 定時任務

project celery task celery包 init py 包檔案 celery.py celery連線和配置相關檔案,且名字必須交celery.py tasks.py 任務體函式檔案 注意 任務體 檔案要與celery.py檔案在同乙個包下 beat也是乙個socket,啟動後會根據配...

Celery 定時任務

celery beat是乙個排程程式,它定期啟動任務,然後由集群中的可用工作程式節點執行任務。預設情況下,條目是從 beat schedule 設定中獲取的 但也可以使用自定義儲存,例如將條目儲存在sql資料庫中。必須確保一次只有乙個排程程式針對乙個排程任務執行,否則最終將導致重複的任務。使用集中式...

celery定時任務

預先在django中配置好celery,接下來著手配置下定時任務。時區修改為本地時區 在setttings.py 新增以下任意一行 celery timezone asia shanghai 如果使用了django celery beat持久化到資料庫,那麼需要手動執行更新命令 python man...