Windows下开发Django使用celery完成异步、定时任务

Windows+ Django + celery +redis
简介我就不多说,你随便搜一搜那哪都是。
中文手册地址:https://www.celerycn.io/ru-men/celery-jin-jie-shi-yong
官网地址:https://docs.celeryproject.org/en/stable/
pip install 以下库。这一套库亲测有效你可以直接按这个版本

celery             3.1.26.post2
Django             3.2
django-celery      3.3.0
django-redis       4.12.1
multivolumefile    0.2.3
numpy              1.19.5
pip                21.1.1
PyMySQL            1.0.2
redis              3.2.0

官方说celery-4.0以后就不再支持windows。所以你在windows下开发一定要看清版本,否则会报各种错【躺了很多坑,血一样的教训】。

我的Djang下目录结构如下:
在这里插入图片描述
1、init.py[修改]


from __future__ import absolute_import, unicode_literals
import pymysql
pymysql.install_as_MySQLdb()
\# 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']

2、settings.py[修改]
其他代码不表,修改INSTALLED_APPS和新增redis配置
在这里插入图片描述

#【新增ridis配置】设置缓存时间
REDIS_TIMEOUT=24*60*60
CUBES_REDIS_TIMEOUT=60*30
NEVER_REDIS_TIMEOUT=365*24*60*60
CACHES={'default':{
'BACKEND':'django_redis.cache.RedisCache',
'LOCATION':'redis://localhost:6379',#redis所在服务器或容器ip地址
"OPTIONS":{
"CLIENT_CLASS":"django_redis.client.DefaultClient",
"PASSWORD":"",#你设置的密码
},}}

3、celery.py [新增]

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:lf


from __future__ import absolute_import, unicode_literals
import os
from celery import Celery, platforms

from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')  # 设置django环境

# app = Celery('pro')
app = Celery('项目名', backend='redis://localhost:6379/1', broker='redis://localhost:6379/0')
app.config_from_object('django.conf:settings')
app.conf.broker_url = 'redis://localhost:6379/0'
app.conf.broker_transport_options = {'visibility_timeout': 43200}
app.conf.timezone = 'Asia/Shanghai'


app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
platforms.C_FORCE_ROOT = True


from kombu import serialization
serialization.registry._decoders.pop("application/x-python-serialize")

app.conf.update(
    CELERY_ACCEPT_CONTENT = ['json'],
    CELERY_TASK_SERIALIZER = 'json',
    CELERY_RESULT_SERIALIZER = 'json',
)


if __name__ == '__main__':
    app.start()
    pass

4、tasks.py[新增]

From __future__ import absolute_import,unicode_literals
From celery import shared_task

@shared_task
Def add(a,b):
	print(a+b)      
pass

5、views.py[修改]

from objname import tasks

def creste_tasks():
      res = tasks.add.delay(1,3)#注意要加.delay()
      return 

输入命令启动:

python manage.py runserver
#windows下输入以下服务开启
Celery -A Newsletter.celery worker -l info --pool=solo --scheduler django_celery_beat.schedulers:DatabaseSched
uler
#linux
celery -A 项目名.celery worker -l info --pool=solo --scheduler django_celery_beat.schedulers:DatabaseScheduler

开启后如图成功:
在这里插入图片描述

常见错误:
在这里插入图片描述

[2021-05-14 10:37:26,083: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: .
Trying again in 2.00 seconds...

[2021-05-14 10:37:32,179: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: .
Trying again in 4.00 seconds...

这种你未开启redis数据库服务,开启就好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Celery是一个Python分布式任务队列,它可以帮助我们异步地执行任务,而且还可以定时执行任务。下面是使用DjangoCelery框架来实现定时任务的执行的步骤: 1. 安装Celery。可以使用pip工具来安装Celery。 ```bash pip install celery ``` 2. 配置Django项目。在Django项目的settings.py文件中加入以下配置: ```python INSTALLED_APPS = [ # ... 'django_celery_results', 'django_celery_beat', # ... ] CELERY_BROKER_URL = 'redis://localhost:6379' CELERY_RESULT_BACKEND = 'django-db' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_RESULT_SERIALIZER = 'json' CELERY_TASK_SERIALIZER = 'json' ``` 其中,CELERY_BROKER_URL是指定Celery使用Redis作为消息代理,CELERY_RESULT_BACKEND是指定Celery的结果存储方式为Django数据库,CELERY_ACCEPT_CONTENT、CELERY_RESULT_SERIALIZER和CELERY_TASK_SERIALIZER则是指定消息的序列化方式。 3. 创建定时任务。在Django项目的tasks.py文件中定义需要定时执行的任务。例如: ```python from celery import shared_task @shared_task def hello(): print('Hello, World!') ``` 4. 配置定时任务。在Django项目的settings.py文件中加入以下配置: ```python CELERY_BEAT_SCHEDULE = { 'hello_task': { 'task': 'tasks.hello', 'schedule': 10.0, }, } ``` 其中,'hello_task'是任务的名称,'task'指定了任务的函数名,'schedule'则指定了任务的执行间隔时间。 5. 启动Celery。在Django项目的根目录下执行以下命令启动Celery: ```bash celery -A your_project_name worker -l info -B ``` 其中,-A参数指定了Celery要加载的Django项目的名称,-B参数表示启用定时任务。 6. 测试定时任务是否生效。等待10秒钟后,可以在控制台看到输出了'Hello, World!',表示定时任务已经成功执行。 以上就是使用DjangoCelery框架来实现定时任务的执行的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值