Celery调用不同项目的任务
December 10, 2020
本文总阅读量次
2269
前记
PS: 水文笔记…
Celery
的示例或者常用使用方式中, Celery
的Woker以及任务调用经常都是在同一个项目里面.
但是随着项目的拓展,很多时候Celery
任务调用端与Woker的代码并不是在同一个项目里(但是共享同一个Mq, Redis等配置和中间件),而且Celery
是基于RabbitMQ
进行任务信息传输的,非常适合不同的项目调用解耦.
而Celery
有一个非常好的概念–Signature,我们只要在远程端封装一个伪任务的Signature,就可以通过调用该Signature去让另一个项目的Celery执行对应的任务.
1.send_task
在Celery
的文档中,有提到如果是调用不同项目的Woker可以使用send_task方法,先看看Woker端的代码:
1 |
|
作为调用端,如果需要调用的话需要如下代码去调用:
1 |
|
可以发现只要通过send_task传送对应的任务名即可,事实上Celery
最底层的远程调用逻辑也是通过send_task.不过如果要通过send_task远程调用并使用Celery
的其他特性却比较困难,要自己去了解源码,并经过一定的封装,好再Celery
中有一个叫签名–Signature的概念.
2.Signature
Signature非常好用,通过他我们可以很容易的使用Celery
的高级方法,而且在不同项目中,我们的调用方法也是跟相同项目的调用方法是一致的.先看看通过Signature改进后的调用端代码:
1 |
|
看起来参数比较多一点,但是可以看到我们可以像平常同个项目下调用task一样使用delay()方法.可以看做上面的block_signature等于woker项目的test().si,所以Signature也支持其他高级调用,如Chain:
1 |
|
3.附录
3.1检查任务是否运行结束
1 |
|
- 本文作者:So1n
- 本文链接:http://so1n.me/2020/12/10/Celery%E8%B0%83%E7%94%A8%E4%B8%8D%E5%90%8C%E9%A1%B9%E7%9B%AE%E7%9A%84%E4%BB%BB%E5%8A%A1/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
查看评论