Windows环境下Django+Celery报错10061:Redis服务启动问询
解决Windows下Celery连接Redis失败(Error 10061)的问题
兄弟,你碰到的这个Error 10061原因特别明确——你的本地Redis服务根本没启动!Windows不像Linux默认预装Redis,得自己安装并启动它才能用,我给你一步步说怎么搞定:
一、安装并启动Redis服务
1. 下载Redis for Windows
找适配Windows的Redis压缩包(官方维护的Windows版本),选64位的zip包就行,解压到你方便找到的目录,比如C:\Redis。
2. 启动Redis服务
临时启动(手动模式)
打开CMD或者PowerShell,切换到Redis解压目录:
cd C:\Redis
执行启动命令:
redis-server.exe redis.windows.conf
等控制台输出类似「Ready to accept connections on port 6379」的字样,就说明Redis跑起来了——这个窗口别关,关闭的话Redis服务会直接停止。
安装成Windows服务(开机自启)
要是不想每次开机都手动启动,可以把Redis注册成系统服务:
还是在Redis目录下,先执行安装命令:
redis-server --service-install redis.windows.conf --loglevel verbose
然后启动服务:
redis-server --service-start
以后开机Redis就会自动运行了,要停止服务的话用:
redis-server --service-stop
3. 验证Redis是否正常运行
打开另一个终端窗口,运行:
redis-cli.exe
输入ping,如果返回PONG,就说明Redis连接完全正常了。
二、重新启动Celery Worker
现在Redis已经正常运行,回到你的项目目录,重新执行Celery命令:
celery worker -A myemail.celery -l info
这次应该就能成功连接Redis,不会再报10061的错误了。
附:你提供的相关信息
执行的Worker命令
celery worker -A myemail.celery -l info
Worker运行日志
-------------- celery@LAPTOP-ERVJPN6C v4.3.0 (rhubarb) ---- **** ----- --- * *** * -- Windows-10-10.0.18362-SP0 2019-12-30 19:35:13 -- * - **** --- - ** ---------- [config] - ** ---------- .> app: myemail:0x38d56d0 - ** ---------- .> transport: redis://localhost:6379/0 - ** ---------- .> results: - *** --- * --- .> concurrency: 8 (prefork) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . email.tasks.send_confirmation_email_to_subscriber [2019-12-30 19:35:14,763: INFO/SpawnPoolWorker-1] child process 17836 calling self.run() [2019-12-30 19:35:14,782: INFO/SpawnPoolWorker-4] child process 19512 calling self.run() [2019-12-30 19:35:14,782: INFO/SpawnPoolWorker-6] child process 6816 calling self.run() [2019-12-30 19:35:14,789: INFO/SpawnPoolWorker-8] child process 12316 calling self.run() [2019-12-30 19:35:14,793: INFO/SpawnPoolWorker-2] child process 15580 calling self.run() [2019-12-30 19:35:14,799: INFO/SpawnPoolWorker-5] child process 18588 calling self.run() [2019-12-30 19:35:14,801: INFO/SpawnPoolWorker-3] child process 14108 calling self.run() [2019-12-30 19:35:14,802: INFO/SpawnPoolWorker-7] child process 8944 calling self.run() [2019-12-30 19:35:18,230: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 10061 connecting to localhost:6379. No connection could be made because the target machine actively refused it.. Trying again in 2.00 seconds... [2019-12-30 19:35:24,252: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 10061 connecting to localhost:6379. No connection could be made because the target machine actively refused it.. Trying again in 4.00 seconds... [2019-12-30 19:35:32,289: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 10061 connecting to localhost:6379. No connection could be made because the target machine actively refused it.. Trying again in 6.00 seconds...
settings.py中Celery相关配置
# // Celery configurations \ CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'django-db'
celery.py文件内容
import os from celery import Celery # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myemail.settings') app = Celery('myemail') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
内容的提问来源于stack exchange,提问作者Atom




