celery 每个 worker 在执行任务时,如何配置一定数量的 task?

2017-02-27 10:45:47 +08:00
 akmonde
我这边本机起了两个 worker ,然后设置了 CELERYD_PREFETCH_MULTIPLIER 为 1 。
但是跑起来以后,发现 STARTED 和 RECEVED 都有一大把,结果把我机器给跑崩了。

本来觉得是在 celery 起的 task 函数,里面的线程可能没优化好,导致这种情况,但后来觉得应该不会一次性 start 这么多的 task 啊。

个人觉得应该是一个 worker 同时只会解决一个 task 才对,或者这个解决的量是可以配置的,我这里没找到配置选项。。。

大家有没有什么好的办法,跪求解决方案!
18075 次点击
所在节点    Python
23 条回复
mengdodo
2018-11-15 11:23:49 +08:00
@akmonde
#查看 celery 启动的 work 进程 pid
ps aux | grep celery
#批量 kill 所有的 celery 生成的 work 方法 1
ps auxww | grep 'worker -l info' | awk '{print $2}' | xargs kill -9
#批量 kill 掉 celery 的 work 方法 2
详细文档: https://celery.readthedocs.io/en/latest/userguide/workers.html#stopping-the-worker
pkill -9 -f 'celery -A [项目名] worker'
akmonde
2018-11-19 16:50:11 +08:00
@mengdodo 这是 17 年的帖子了...不过还是谢谢兄 dei~
louyuguang
2019-01-14 11:46:57 +08:00
@Stony 兄弟,你的 task_acks_late 这个参数对我帮助太大了,这个问题我找了两个礼拜。
因为我的一个 task 可能要执行 10s~600s 不等,我的 worker 同时只能执行一个 task。所以我不希望任何一个 worker 在执行一个任务的时候,再接收其他任务(除非所有 worker 都在执行任务。)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/343440

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX