我是芹菜新手。我见过的所有例子都是从命令行开始的芹菜工作者。 e.g:
$ celery -A proj worker -l info
我正在开始一个关于弹性beanstalk的项目,并认为让worker成为我的web应用程序的子进程会很好。我尝试使用多处理,它似乎工作。我想知道这是不是一个好主意,或者是否存在一些缺点。
import celery
import multiprocessing
class WorkerProcess(multiprocessing.Process):
def __init__(self):
super().__init__(name='celery_worker_process')
def run(self):
argv = [
'worker',
'--loglevel=WARNING',
'--hostname=local',
]
app.worker_main(argv)
def start_celery():
global worker_process
worker_process = WorkerProcess()
worker_process.start()
def stop_celery():
global worker_process
if worker_process:
worker_process.terminate()
worker_process = None
worker_name = 'celery@local'
worker_process = None
app = celery.Celery()
app.config_from_object('celery_app.celeryconfig')
答案 0 :(得分:2)
似乎是一个不错的选择,绝对不是唯一的选择,而是一个很好的选择:)
您可能想要研究的一件事(您可能已经这样做了)是将自动缩放与Celery队列的大小相关联。所以你只有在队列增长时才能扩展。
Celery实际上在内部做了类似的事情,所以没有太大的区别。我能想到的唯一障碍是处理外部资源(例如数据库连接),这可能是一个问题,但完全取决于你在Celery上做了什么。