在Celery中动态添加/移除工作池中的线程

8 投票
1 回答
2121 浏览
提问于 2025-04-16 22:58

我想知道怎么在当前的多进程池中添加更多的线程(或者移除一些线程),而且这个操作是在任务内部进行的。比如说,我启动了celeryd,并设置了CELERYD_CONCURRENCY = 10,但我想在运行时把它改成CELERYD_CONCURRENCY = 15。

有一个叫做 celery.concurrency.processes.TaskPool.Pool.grow 的函数,但我不知道怎么在一个正在运行的任务中调用它,或者说这是不是正确的函数来实现这个功能。

1 个回答

1

查看源代码:

https://github.com/ask/celery/blob/master/celery/concurrency/processes/__init__.py

里面有 grow()shrink() 这两个函数,不过后者看起来有点奇怪。

如果你只有一个池子,记得要在某个地方保存对这个池子的引用,可以把它设为全局变量。

提醒一下:如果 multiprocessing 是指运行 多个独立的进程,那么当你尝试扩展或缩减时,你可能已经在一个子进程里了,这样就不行了。

撰写回答