解决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 2019-08-04 14:39  xufat  阅读(1371)  评论(1编辑  收藏  举报

导航

/* 返回顶部代码 */ TOP