测试环境是windows 7 64
python 2.7.8
Celery 3.2
Redis 2.8.19
代码就是 Celery 的例子
https://gist.github.com/GameXG/21763336458d417a60ad
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win32
》 sys.path.append(r".\TaskQueue")
》 from tasks import add
》 r = add.delay(5,10)
》 r.status
'PENDING'
》 r.status
'PENDING'
》 r.ready()
False
状态总是 PENDING ,tasks worker 明明显示任务已经完成了。但总是得不到任务结果,文档上面的几种办法都尝试过了,还是无效...
也尝试过用两个 redis 分开试,结果一样无任务结果...
redis-cli 得到的数据库内容:
127.0.0.1:6379> keys *
1) "_kombu.binding.celeryev"
2) "_kombu.binding.celery"
3) "_kombu.binding.celery.pidbox"
tasks worker工作日志
c:\Python27\Scripts\celery.exe -A tasks worker --loglevel=info
-------------- celery@GameXG-PC v3.1.17 (Cipater)
---- **** -----
--- * *** * -- Windows-7-6.1.7601-SP1
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x2ff2550
- ** ---------- .> transport: redis://localhost:6379//
- ** ---------- .> results: redis://localhost/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
[tasks]
. tasks.add
[2015-03-17 20:53:36,552: INFO/MainProcess] Connected to redis://localhost:6379//
[2015-03-17 20:53:36,605: INFO/MainProcess] mingle: searching for neighbors
[2015-03-17 20:53:37,625: INFO/MainProcess] mingle: all alone
[2015-03-17 20:53:37,638: WARNING/MainProcess] celery@GameXG-PC ready.
[2015-03-17 20:53:46,365: INFO/MainProcess] Received task: tasks.add[9aaa35f7-f1f1-4360-add4-37467aa2d770]
[2015-03-17 20:53:46,377: INFO/MainProcess] Task tasks.add[9aaa35f7-f1f1-4360-add4-37467aa2d770] succeeded in 0.00999999046326s: 15
1
20150517 2015-03-17 21:39:13 +08:00
add.apply_async(...)
|
2
gamexg OP 相同代码在 ubuntu 下测试可以正常工作。
调用内部方法也可以正常保存: 》 r.backend._store_result(r.id,"11","00","00") '11' 》 r.status u'00' 》 r.result u'11' 可以看到这次数据库里面有了内容: 127.0.0.1:6379> keys * 1) "_kombu.binding.celeryev" 2) "celery-task-meta-00000" 3) "celery-task-meta-21b7472a-88b7-4850-8659-893ceaa18973" 4) "_kombu.binding.celery" 5) "_kombu.binding.celery.pidbox" |
3
gamexg OP |
4
20150517 2015-03-17 21:52:18 +08:00 via Android
你backend设了没有
|
5
gamexg OP @20150517 设置了 app = Celery('tasks', backend='redis://localhost', broker='redis://localhost')
|
6
20150517 2015-03-17 22:19:19 +08:00 via Android
purge下 重启下redis呢 celery这东西很怪的 有时候我明明有task就是不跑
|
7
gamexg OP |
8
x14oL 2015-05-22 01:27:08 +08:00
@gamexg 昨天拿你的解决了问题,现在发现你的解决方案不是最优的。
--pool=solo会把程序变成单线程的,这样效率太低了。 这时候应该切换模式。 使用-P threads 模式就可以解决这个问题了。 celery.exe -A tasks worker -l info -P threads 类似这样。 |
9
akmonde 2017-05-17 16:59:21 +08:00
|
10
thechosenone 2018-09-05 18:47:33 +08:00
虽然时间过去久远,但是可能还会有人一样和我出现同样的问题而点进来找答案的
我的情况和 lz 一样,解决办法重启 redis 就可以 |