计算斐波那契数列的任务已经实现并且运行。所有任务都被发送到默认的Celery队列。然而,有方法路由任务到不同的队列。让我们重构服务器端的架构来实现路由任务。我们将根据任务类型定义队列。 在服务器端启动Celery server时,我们将建立三种不同的队列,它们将被workers消费。斐波那契数列任务有fibo_queue,平方根任务有sqrt_queue,网络爬虫任务有 webcrawler_queue。然而,划分队列有什么好处呢。以下列举一些:
- 相同类型的任务划分为一组,使得监控更加简单
- 定义worker从一个队列取任务,性能更佳
- 可在性能更好的机器上建立任务更重的队列
为了再server上建立队列,我们只需用如下命令初始化Celery:
$celery –A tasks –Q sqrt_queue,fibo_queue,webcrawler_queue worker --loglevel=info
下图是在服务端截图:
在进行下一个例子之前,我们路由现有的任务到队列中。在服务端,在task_dispatcher.py模块中,我们将修改send_task调用来将任务发送到不同的队列。修改如下:
app.send_task('tasks.sqrt_task', args=(value,),
queue='sqrt_queue', routing_key='sqrt_queue')
然后,修改fibo_task调用,如下:
app.send_task('tasks.fibo_task', args=(x,), queue='fibo_queue',
routing_key='fibo_queue')
如果有兴趣监控队列、统计任务数量或者其他,请参考Celery文档 http://celery.readthedocs.org/en/latest/userguide/monitoring.html。 在任何情况用Redis,redis-cli都可以作为一个工具。队列、任务、workders都可以被监控,详见 http://celery.readthedocs.org/en/latest/userguide/monitoring.html#workers.