You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动