解决Windows不支持celery 4以上的版本的问题
创建一个celery application 用来定义你的任务列表
创建一个任务文件就叫celery_test.py
from celery import Celery app = Celery('tasks', broker='redis://:edwin123@192.168.190.128', backend='redis://:edwin123@192.168.190.128') @app.task def add(x, y): print("running...", x, y) return x + y
启动Celery Worker来开始监听并执行任务
打开windows终端启动celery worker
celery -A celery_test worker --loglevel=info
调用任务
再打开一个终端, 进行命令行模式,调用任务
>>> from celery_test import add >>> add.delay(4, 4)
结果报错
[2019-08-04 12:49:49,787: INFO/MainProcess] Received task: celery_test.add[58c3a11e-1b19-48ed-a8e9-fe3e0213beb2] [2019-08-04 12:49:49,852: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',) Traceback (most recent call last): File "f:\learnpython\learn_django\venv\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs))) File "f:\learnpython\learn_django\venv\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0) [2019-08-04 12:50:20,047: INFO/MainProcess] Received task: celery_test.add[28428d1f-67bf-48a0-b058-050286d6bf17] [2019-08-04 12:50:20,059: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',) Traceback (most recent call last): File "f:\learnpython\learn_django\venv\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs))) File "f:\learnpython\learn_django\venv\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0) [2019-08-04 12:53:56,768: INFO/MainProcess] Received task: celery_test.add[4e5acc0e-0359-44ab-a71a-ae0335009ce5] [2019-08-04 12:53:56,776: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',) Traceback (most recent call last): File "f:\learnpython\learn_django\venv\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs))) File "f:\learnpython\learn_django\venv\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0) [2019-08-04 12:54:06,615: INFO/MainProcess] Received task: celery_test.add[f5365aa1-0fcb-43f0-8453-8d57137f2f87] [2019-08-04 12:54:06,622: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',) Traceback (most recent call last): File "f:\learnpython\learn_django\venv\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs))) File "f:\learnpython\learn_django\venv\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0)
通过查找,发现是celery 4以上的版本不支持windows。
所以通过以下方法可使windows上支持celery。
方法一:
安装eventlet模块
pip install eventlet
重新启动celery worker
celery -A celery_test worker --loglevel=info -P eventlet
调用任务
再打开一个终端, 进行命令行模式,调用任务
>>> from celery_test import add
>>> add.delay(4, 0)
运行正常
-------------- celery@PC-20151019PZHE v4.3.0 (rhubarb) ---- **** ----- --- * *** * -- Windows-7-6.1.7601-SP1 2019-08-04 14:35:05 -- * - **** --- - ** ---------- [config] - ** ---------- .> app: tasks:0x3854790 - ** ---------- .> transport: redis://:**@192.168.190.128:6379// - ** ---------- .> results: redis://:**@192.168.190.128/ - *** --- * --- .> concurrency: 4 (eventlet) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . celery_test.add [2019-08-04 14:35:05,356: INFO/MainProcess] Connected to redis://:**@192.168.190.128:6379// [2019-08-04 14:35:05,381: INFO/MainProcess] mingle: searching for neighbors [2019-08-04 14:35:07,969: INFO/MainProcess] mingle: all alone [2019-08-04 14:35:08,011: INFO/MainProcess] pidbox: Connected to redis://:**@192.168.190.128:6379//. [2019-08-04 14:35:08,074: INFO/MainProcess] celery@PC-20151019PZHE ready. [2019-08-04 14:35:32,146: INFO/MainProcess] Received task: celery_test.add[3861c769-21b0-4d40-bffb-093461745d41] [2019-08-04 14:35:32,148: WARNING/MainProcess] running... [2019-08-04 14:35:32,151: WARNING/MainProcess] 4 [2019-08-04 14:35:32,151: WARNING/MainProcess] 0 [2019-08-04 14:35:32,163: INFO/MainProcess] Task celery_test.add[3861c769-21b0-4d40-bffb-093461745d41] succeeded in 0.01599999999962165s : 4
方法二:
如果涉及到多进程,则安装以下模块。
安装gevent模块
pip install gevent
重新启动celery worker
celery -A celery_test worker --loglevel=info -P gevent
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义