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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值