在Celery中动态添加/移除工作池中的线程
我想知道怎么在当前的多进程池中添加更多的线程(或者移除一些线程),而且这个操作是在任务内部进行的。比如说,我启动了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 是指运行 多个独立的进程,那么当你尝试扩展或缩减时,你可能已经在一个子进程里了,这样就不行了。