1. 程式人生 > >flask celery 多worker指定執行

flask celery 多worker指定執行

原來的程式碼裡寫到了一起,就一個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指定佇列。 不同佇列就是不同的執行主機型別,這樣就可以多臺不同型別的執行主機去執行不同的任務。