我将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服务。
答案 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