你的celery worker和result backend为什么不工作?

在历经一天多的困扰后,我的celery的FAQ中找到了答案:

Windows¶
Does Celery support Windows?
Answer: No.
Since Celery 4.x, Windows is no longer supported due to lack of resources.
But it may still work and we are happy to accept patches.

从Celery4.X版本起,不再支持windows。。。。。。我X你大爷,从flask到celery的Get Started完全没有提到这一点,能不能考虑一下用windows+venv开发的同学?。。。


具体的问题现象如下,我用的是5.2.1版本,在windows系统下:
提交任务后result backend不返回结果,worker日志打印是这个样子:

[2021-12-15 14:58:38,933: INFO/MainProcess] Task server.tasks.add_together[abc5de5d-d5da-4a76-832d-c801c18cf656] received
[2021-12-15 14:58:39,412: INFO/SpawnPoolWorker-39] child process 14104 calling self.run()
[2021-12-15 14:58:39,421: INFO/SpawnPoolWorker-40] child process 3872 calling self.run()
[2021-12-15 14:58:39,426: INFO/SpawnPoolWorker-43] child process 8220 calling self.run()
[2021-12-15 14:58:39,429: INFO/SpawnPoolWorker-44] child process 6124 calling self.run()
[2021-12-15 14:58:39,432: INFO/SpawnPoolWorker-42] child process 5052 calling self.run()
[2021-12-15 14:58:39,434: INFO/SpawnPoolWorker-41] child process 14164 calling self.run()
[2021-12-15 14:58:39,434: INFO/SpawnPoolWorker-45] child process 16120 calling self.run()
[2021-12-15 14:58:39,443: INFO/SpawnPoolWorker-46] child process 5952 calling self.run()

redis中的任务全部在unack:

127.0.0.1:6379> keys *
1) "_kombu.binding.celeryev"
2) "_kombu.binding.celery.pidbox"
3) "unacked_index"
4) "_kombu.binding.celery"
5) "unacked"

更换linux后恢复正常:

 -------------- celery@usiel-virtualbox v5.2.1 (dawn-chorus)
--- ***** ----- 
-- ******* ---- Linux-5.10.30-1-MANJARO-x86_64-with-glibc2.33 2021-12-15 16:08:57
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x7fada597c0d0
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     redis://localhost:6379/0
- *** --- * --- .> concurrency: 2 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
                

[tasks]
  . tasks.add

[2021-12-15 16:08:57,213: INFO/MainProcess] Connected to redis://localhost:6379/0
[2021-12-15 16:08:57,234: INFO/MainProcess] mingle: searching for neighbors
[2021-12-15 16:08:58,258: INFO/MainProcess] mingle: all alone
[2021-12-15 16:08:58,279: INFO/MainProcess] celery@usiel-virtualbox ready.
[2021-12-15 16:09:27,775: INFO/MainProcess] Task tasks.add[e4d743dd-71a9-4231-a252-a4190fbac9c0] received
[2021-12-15 16:09:27,781: INFO/ForkPoolWorker-2] Task tasks.add[e4d743dd-71a9-4231-a252-a4190fbac9c0] succeeded in 0.004830595999919751s: 10

具体是怎么找到这个答案的呢?

其实也是一个常规的思路,一开始也是各种百度、google、StackOverflow。。。最后发现根本没有这个问题的现象,类似的问题也是答案不对头,随后还是把目光对准官方文档,准备找一下worker原理,事实上也看了,但都是操作类的,没什么用,随后就在FAQ中发现了这个答案,如果还找不到的话估计要去扒代码了。。。事实上celery代码量也还行,FAQ里有说:

Does Celery really consist of 50.000 lines of code?
Answer: No, this and similarly large numbers have been reported at various locations.
The numbers as of this writing are:
core: 7,141 lines of code.
tests: 14,209 lines.
backends, contrib, compat utilities: 9,032 lines.
Lines of code isn’t a useful metric, so even if Celery did consist of 50k lines of code you wouldn’t be able to draw any conclusions from such a number.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值