Django+celery开启时报错

在使用Celeryworker并启用了-Peventlet多线程池时遇到DatabaseError,切换到单线程池(--pool=solo)解决了问题。更新Django到4.2.2,且需使用Python3.8环境以避免其他错误。

django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 19767205568
00 and this is thread id 1976775359680.

问题:

执行celery worker -A s1 -l info -P eventlet能正常,放立即执行的任务(delay)没有问题,不过放apply_async的任务时就会报上面的错误。

网上都说是版本的问题,我的版本是

celery                  4.4.0
Django                  4.2.1
django-redis            5.2.0
eventlet                0.33.3
redis                   4.5.4

解决办法:

由于-P eventlet是多线程任务的,改成单线程任务,用参数--pool=solo代替-P eventlet。

还需要把python3.9换成python3.8才可以,否则还会报其它错。

当前包的版本信息如下:

celery                  4.4.0
Django                  4.2.2
django-redis            5.3.0
eventlet                0.33.3
redis                   4.5.4

执行这个就正常了 

celery worker -A djangoTest -l info 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值