摆脱celery限制

最近使用了celery,但用着感觉不是很爽,因为它需要把worker和任务调用的逻辑放在同一个工程里面。所以,当分布式使用时,需要将这个工程复制到不同的机器上,而不是将worker与任务调用的逻辑分开。

这段时间都在思考如何摆脱这个限制,想到了一个方案:

  1. 一般,celery任务调用如下:
@app.task
def add(x, y):
    return x + y

from tasks import add
add.delay(4, 4)

以上调用都是基于可以引用到方法add的基础上可行的

  1. 那么我们如果把没有什么特殊限制的任务在这个基础上做的更通用一点是不是可以更好一点,如果在再在这个通用的基础上做成一个基础库,到需要配置的机器上安装,就可以在不同的工程上直接使用了,不必worker和任务调用逻辑混在一起了

  2. 如何通用?

    联想到http请求,我们只要绑定自己的请求参数,请求方法,访问对应的url就行了,这都是统一的。
    参考其数据结构,我们可以定义一个通用的方法,例子为:

    客户端:

    @app.task
    def revoke_task(method, data):
       taskhandler = get_handler(method)
       result = taskhandler.deal(data)
       return result

    简单的想法如上文所说,由于没有考虑celery中频率限制等特性,因此,上述的方案看来只适用于那些没有什么条件限制的任务。

望大家指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值