windows系统在django环境中启动celery解决报错

项目中要使用celery,今天在配置时遇到了很多问题,稍微记录一下

参考了这个博主的配置步骤,这里只讲启动遇到的问题:
纯纯干货Django+Celery+Redis在Windows环境下运行

注:celery使用要先安装启动redis,具体这里就不阐述了

但我也遇到了其他问题,现在说一下启动的问题。

1、启动前需执行数据迁移

python manage.py migrate (可不用执行 makemigrations)

2、启动celery:在项目主目录manage.py同级启动命令:
注:celery_tasks文件需要与manage.py在同级,否则若在视图层调用定义的tasks方法会找不到文件夹No module named ‘celery_tasks’

celery -A celery_tasks.main worker -l info

3、【按需】若在config.py设置了定时任务,则还要启动定时任务命令:

celery -A celery_tasks.main beat -l info

4.1、【按需】第2步或第3步报错ValueError: not enough values to unpack (expected 3, got 0)
原因:win10调用celery4.x版本以上的都会出现此错误,解决方法如下:

pip install eventlet

4.2、【按需】如有4.1的报错,第2步启动celery 改为如下命令

celery -A celery_tasks.main worker -l info -P eventlet

4.3、【按需】执行4.2命令时报错 module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms‘

原因:安装的 cryptography库与你现在的使用的环境不兼容导致的,可能是因为cryptography的版本太高,需要进行降级

pip install cryptography==38.0.4

4.4、【按需】执行4.3 时报错无权限 Could not install packages due to an OSError:[WinError 5]拒绝访问
管理员打开cmd窗口,进入项目文件

pip install cryptography==38.0.4

5、总结:
有第4.1报错:以后每次项目启动就(redis要启动)

# 启动celery
celery -A celery_tasks.main worker -l info -P eventlet  
# 【按需】启动celery定时任务
celery -A celery_tasks.main beat -l info

无第4.1报错:以后每次项目启动就(redis要启动)

# 启动celery
celery -A celery_tasks.main worker -l info  
# 启动celery定时任务
celery -A celery_tasks.main beat -l info
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Django 启动 Celery 通常需要以下步骤: 1. 安装 Celery: ``` pip install celery ``` 2. 在 Django 项目创建一个 Celery 应用: ``` django-admin startapp celery_app ``` 3. 在 Django 项目的 settings.py 文件添加以下配置: ``` # Celery 配置 CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_TIMEZONE = 'Asia/Shanghai' # Celery 应用程序 CELERY_APP_NAME = 'my_project.celery_app' CELERY_IMPORTS = ( 'my_project.celery_app.tasks', ) # Celery Worker 配置 CELERYD_CONCURRENCY = 1 CELERYD_MAX_TASKS_PER_CHILD = 1 CELERYD_TASK_TIME_LIMIT = 30 * 60 ``` 其,`CELERY_BROKER_URL` 和 `CELERY_RESULT_BACKEND` 配置用于指定消息队列和任务结果存储方式,这里使用了 RabbitMQ 和 Redis。`CELERY_TIMEZONE` 配置用于指定时区。`CELERY_APP_NAME` 配置用于指定 Celery 应用程序的路径。`CELERY_IMPORTS` 配置用于指定任务模块。`CELERYD_CONCURRENCY` 配置用于指定并发数。`CELERYD_MAX_TASKS_PER_CHILD` 配置用于限制每个 worker 最大执行任务数。`CELERYD_TASK_TIME_LIMIT` 配置用于限制任务的最长执行时间。 4. 在 Django 项目创建一个 tasks.py 文件,定义 Celery 任务: ```python from celery import shared_task @shared_task def add(x, y): return x + y ``` 5. 在 Django 项目创建一个 celery.py 文件,用于初始化 Celery 应用程序: ```python import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings') app = Celery('my_project') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() ``` 6. 启动 Celery Worker: ``` celery -A my_project worker -l info ``` 其,`-A` 参数用于指定 Celery 应用程序,`worker` 命令用于启动 Celery Worker,`-l` 参数用于指定日志级别。 这样,就可以在 Django 项目启动 Celery 了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值