flask celery 多worker指定執行
阿新 • • 發佈:2018-12-21
原來的程式碼裡寫到了一起,就一個worker執行,兩個定時任務非同步任務都放到一個佇列,經常阻塞不夠用。 這裡我這樣修改的。 先將定時任務都發到一個佇列。然後定時任務調起來的非同步任務是發到不同的佇列的。配置是這樣的。 celery 4.2
# celery app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' app.config['result_backend'] = 'redis://localhost:6379/0' #這裡的是佇列 CELERY_QUEUES = ( # Queue("default", Exchange("default"), routing_key="default"), Queue("schedule", Exchange("schedule"), routing_key="schedule"), Queue("alive", Exchange("alive"), routing_key="alive"), Queue("replay", Exchange("replay"), routing_key="replay"), Queue("engine", Exchange("engine"), routing_key="engine") ) #這裡是任務對應的佇列,相當於是路由 CELERY_ROUTES = { 'tasks.build.schedule': {"queue": "schedule", "routing_key": "schedule"}, 'tasks.build.alive': {"queue": "alive", "routing_key": "alive"}, 'tasks.build.replay': {"queue": "replay", "routing_key": "replay"}, 'tasks.build.engine': {"queue": "engine", "routing_key": "engine"} } app.config['task_queues'] = CELERY_QUEUES app.config['task_routes'] = CELERY_ROUTES celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL']) celery.conf.update(app.config)
這裡配置完成後。 定時任務和非同步任務就不寫了。 worker怎麼執行呢 這樣:
celery worker -A task.buid -l info -Q 佇列名(例如:alive)
這個worker執行的就是 alive的佇列的任務。 -Q指定佇列。 不同佇列就是不同的執行主機型別,這樣就可以多臺不同型別的執行主機去執行不同的任務。