django 使用celery实现定时任务
时间: 2023-09-05 07:14:02 浏览: 173
Django 是一个非常流行的 web 框架,而 Celery 是一个 Python 分布式任务队列,它可以让我们方便地在 Django 中实现定时任务。下面是一个简单的例子:
第一步是安装和配置 Celery。可以使用 pip 安装:
```
pip install celery
```
然后在 Django 的 settings.py 文件中添加以下配置:
```
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_TIMEZONE = 'Asia/Shanghai'
```
这里假设我们使用 Redis 作为消息代理和结果存储。
第二步是创建一个 Celery 应用。在 Django 的项目目录下创建一个 celery.py 文件,添加以下内容:
```python
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
```
这里的 your_project 是你的 Django 项目名称。
第三步是定义任务。在 Django 的某个 app 下创建一个 tasks.py 文件,添加以下内容:
```python
from celery import shared_task
from datetime import datetime
@shared_task
def print_time():
print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
```
这里定义了一个名为 print_time 的任务,它会打印当前时间。
第四步是配置定时任务。在项目目录下创建一个 tasks 目录,然后创建一个名为 beat.py 的文件,添加以下内容:
```python
from celery import Celery
from celery.schedules import crontab
app = Celery()
app.conf.timezone = 'Asia/Shanghai'
app.conf.beat_schedule = {
'print_time': {
'task': 'your_app.tasks.print_time',
'schedule': crontab(minute='*/1'),
},
}
```
这里的 your_app 是你定义任务的 app 名称,这个配置会让 print_time 这个任务每分钟执行一次。
最后,在命令行中启动 Celery:
```
celery -A your_project worker -l info -Ofair
```
然后再打开一个命令行窗口,启动定时任务:
```
celery -A your_project beat -l info
```
这样就完成了 Django 使用 Celery 实现定时任务的配置。
阅读全文