使用Gunicorn将Celery作为Flask应用程序运行

时间:2019-05-17 03:48:34

标签: python flask celery microservices gunicorn

我将Celery作为Flask微服务运行,其中包含带有任务的task.py和manage.py包含运行flask服务器的调用。

这是manage.py的一部分


class CeleryWorker(Command):
    """Starts the celery worker."""
    name = 'celery'
    capture_all_args = True

    def run(self, argv):
        if "down" in argv:
            ret = subprocess.call(
                ['pkill', '-9', '-f', "my_app.celery"])
            sys.exit(ret)
        else:
            ret = subprocess.call(
                ['celery', 'worker', '-A', 'my_app.celery'] + argv)
            sys.exit(ret)


manager.add_command("celery", CeleryWorker())

我可以使用python manage.py runserver或`celery worker -A my_app.celery启动服务,它可以完美运行并将所有任务注册在task.py中。

但是在生产中,我想处理对此微服务的多个请求,并希望添加gunicorn来满足这些请求。我该怎么做?

我无法弄清楚如何同时运行gunicorn命令和celery命令。

此外,由于我不需要它们来运行celery命令,因此我正在从create_app的生产环境中使用gunicorn运行其他api服务。

1 个答案:

答案 0 :(得分:0)

建议使用Supervisor,它允许您控制多个进程。

第1步:pip install supervisor

第二步:vi supervisor.conf

[program:flask_wsgi]
command=gunicorn -w 3 --worker-class gevent wsgi:app 
directory=$SRC_PATH
autostart=true

[program:celery]
command=celery worker -A app.celery --loglevel=info
directory=$SRC_PATH
autostart=true

第3步:运行supervisord -c supervisord.conf