celery队列替代django-q队列
因为django-q无法实现多队列,且项目已经很久没更新了。django-q2虽然还在更新,但是依然不支持多队列,和优先级。 之前的pr比较乱,重新提交下,发现改动点好多。。好多单元测试都需要。。。
这个PR确实很大! 我有一个建议, 你分成几步:
- 梳理所有异步任务的调用点
- 把调用的参数和返回都做成可序列化的参数, 比如 dict, json 等
- 替换 django-q 至 celery
这样你可以把这个任务分解成小任务, 我们其他的有需要的有时间的人也可以帮你完成.
第二步里面, 可以尝试做一些 decorator 或者转换的相关函数, 这样可能后续是可以复用的
https://benninger.ca/posts/celery-serializer-pydantic/ 还有类似这样的自动序列化工具, 也有可能是一个可行的方向
https://benninger.ca/posts/celery-serializer-pydantic/ 还有类似这样的自动序列化工具, 也有可能是一个可行的方向
好的感谢,目前所有的任务调用点,和任务修改成celery这种基本完成了,我手动部署再本地,完成了,基本测试原来所有通知,都已经可以正常用。 1.目前存在一个是否将task任务结果保存django-db的问题,有时候会报出mysql has gone away?我也在尝试找文档解决https://github.com/celery/celery/pull/4292?代码只有很少的地方需要用到task result ,当然也可以使用task_id 来获取,有没有必要来保存到db?
2.目前存在有多个worker接受到同一task ,任务重复执行问题 https://github.com/celery/celery/issues/4400 ? 3.我在想有没有再archery 再单独启动celery beat 支持定时任务? 目前只有一个地方用到了,同步钉钉用户信息,当然支持是更好的,可以从后台直接添加注册果的task 比较方便。 4.很多的单元测试,需要改动。
- mysql has gone away 应该是连接池的问题, 应该是worker 超时时间和 mysql 配置的超时时间不一致导致的.
- 任务重复执行可能是需要再做一个状态, 或者分片, 或者保证 worker 只有一个来解决.
- 定时任务要有的, 有定时执行是需要的吧
- mysql has gone away 应该是连接池的问题, 应该是worker 超时时间和 mysql 配置的超时时间不一致导致的.
- 任务重复执行可能是需要再做一个状态, 或者分片, 或者保证 worker 只有一个来解决.
- 定时任务要有的, 有定时执行是需要的吧
- mysql has gone away 应该是连接池的问题, 应该是worker 超时时间和 mysql 配置的超时时间不一致导致的.
- 任务重复执行可能是需要再做一个状态, 或者分片, 或者保证 worker 只有一个来解决.
- 定时任务要有的, 有定时执行是需要的吧
好的,我先尝试解决以下前两个问题,感谢大佬的建议
https://github.com/celery/celery/pull/6983
1.可以考虑使用beat 实现 ETA任务 2.考虑将rabbitmq consumer_timeout = 31622400000
- mysql has gone away 应该是连接池的问题, 应该是worker 超时时间和 mysql 配置的超时时间不一致导致的.
这个问题你有解决方法么?可以指导以下,目前我依然在本地出现这个问题
@LeoQuote 目前看所有功能都能通过了,这个单元测试需要大佬们帮忙看下