Django每日自动处理Wordle分数需求及Celery安装故障求助
解决方案:自动化处理未完成Wordle用户分数 + 解决django-celery安装失败问题
问题背景
我搭建了Wordle高尔夫网站,供好友玩Wordle并每日追踪分数,网站设有排行榜。需要实现每日午夜自动检查用户当日Wordle完成字段,若为空则写入对应分数数据。网站部署在Heroku,希望找易用工具,此前安装django-celery失败,报错信息如下:
(wordleenv) kyleflannelly@MacBook-Pro-5 wordlegolfing % pip install django-celery Collecting django-celery Using cached django_celery-3.3.1-py3-none-any.whl (63 kB) Collecting celery<4.0,>=3.1.15 Using cached celery-3.1.26.post2-py2.py3-none-any.whl (526 kB) Requirement already satisfied: django>=1.8 in /Users/kyleflannelly/Dev/environments/wordleenv/lib/python3.10/site-packages (from django-celery) (4.1) Requirement already satisfied: pytz>dev in /Users/kyleflannelly/Dev/environments/wordleenv/lib/python3.10/site-packages (from celery<4.0,>=3.1.15->django-celery) (2022.2.1) Collecting kombu<3.1,>=3.0.37 Using cached kombu-3.0.37-py2.py3-none-any.whl (240 kB) Collecting billiard<3.4,>=3.3.0.23 Using cached billiard-3.3.0.23.tar.gz (151 kB) Preparing metadata (setup.py) ... done Requirement already satisfied: asgiref<4,>=3.5.2 in /Users/kyleflannelly/Dev/environments/wordleenv/lib/python3.10/site-packages (from django>=1.8->django-celery) (3.5.2) Requirement already satisfied: sqlparse>=0.2.2 in /Users/kyleflannelly/Dev/environments/wordleenv/lib/python3.10/site-packages (from django>=1.8->django-celery) (0.4.2) Collecting amqp<2.0,>=1.4.9 Using cached amqp-1.4.9-py2.py3-none-any.whl (51 kB) Collecting anyjson>=0.3.3 Using cached anyjson-0.3.3.tar.gz (8.3 kB) Preparing metadata (setup.py) ... error error: subprocess-exited-with-error × python setup.py egg_info did not run successfully. │ exit code: 1 ╰─> [1 lines of output] error in anyjson setup command: use_2to3 is invalid. [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with the package mentioned above, not pip. hint: See above for details.
一、推荐的易用定时任务工具(Heroku环境)
1. Heroku Scheduler(首选)
完全适配Heroku的原生工具,零额外依赖,操作极简:
- 进入Heroku应用的「Resources」页面,搜索添加「Heroku Scheduler」插件
- 点击「Add Job」,设置执行频率为「Daily」,时间选午夜(注意UTC时区转换)
- 在命令框输入触发任务的命令,比如
python manage.py update_unfinished_scores(需先编写Django管理命令处理未完成用户分数) - 保存任务即可自动执行
2. 原生Celery(替代django-celery)
django-celery已过时,现在Celery原生支持Django,步骤如下:
- 安装最新版Celery:
pip install celery - 按照Celery官方文档配置Django集成,设置Beat定时任务
- Heroku上添加Redis/RabbitMQ作为消息代理(比如Heroku Redis插件)
- 通过Procfile配置启动Celery Beat和Worker进程
3. APScheduler(轻量备选)
轻量级定时任务库,无需消息代理:
- 安装APScheduler:
pip install apscheduler - 在Django项目中编写定时函数,配置每日午夜执行
- 通过Procfile启动APScheduler调度器进程,确保后台运行
二、解决django-celery安装失败的方法
安装失败原因是django-celery依赖的旧版celery需要anyjson,而anyjson使用了Python 3.10废弃的use_2to3选项。临时解决可尝试:
pip install anyjson==0.3.3 --use-pep517 pip install django-celery
但更建议直接使用原生Celery,避免依赖过时包的兼容性问题。
内容的提问来源于stack exchange,提问作者Kyle Flannelly
相关产品推荐
相关产品推荐

