解决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

 

posted on   xufat  阅读(1573)  评论(1编辑  收藏  举报

编辑推荐:
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

/* 返回顶部代码 */ TOP
点击右上角即可分享
微信分享提示