从多处理开始芹菜工人

时间:2015-04-26 06:18:15

标签: python flask multiprocessing celery elastic-beanstalk

我是芹菜新手。我见过的所有例子都是从命令行开始的芹菜工作者。 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')

1 个答案:

答案 0 :(得分:2)

似乎是一个不错的选择,绝对不是唯一的选择,而是一个很好的选择:)

您可能想要研究的一件事(您可能已经这样做了)是将自动缩放与Celery队列的大小相关联。所以你只有在队列增长时才能扩展。

Celery实际上在内部做了类似的事情,所以没有太大的区别。我能想到的唯一障碍是处理外部资源(例如数据库连接),这可能是一个问题,但完全取决于你在Celery上做了什么。