我们继承了一个在Py 2.6.8和Django 1.3.5上运行的工具。我们的工具通过API接受更改请求(CR)并将其保留在某些表中。
我们需要执行一些验证并将数据转换为另一组表格。我们希望这种情况最好是异步发生。因此,当CR出现时,在models.Model类的save方法中,我们启动一个线程。该线程将更改细节推送到队列(也是表)。
每秒运行的一个cron作业轮询该表并执行必要的验证&数据转换。
这是我们当前(v0.1)的实现,我们做得相当简单。这基本上是一个发布者 - 订阅者场景,它在后台发生异步。
我想从cron作业的常量轮询转移到发布者 - 订阅者方法。什么会帮助我(记住我们的旧堆栈)?
答案 0 :(得分:3)
你可以考虑芹菜和兔子,它更适合像你这样的东西。
这个想法是:在你的应用程序中创建一个名为tasks.py
的文件,然后将数据验证和转换逻辑放入一个函数中,可以称为validate_and_transfer()
# tasks.py
from celery import task
@task
def validate_and_transfer(data):
# validated_data = validate(data)
# res = transform(data)
# if 'OK' in res.status:
# lalalalala
在您的模型的保存方法中,您只需调用该函数,它就会异步完成您的工作。
Here是Celery的文档,您还可以找到如何使用django等设置它。
希望,这有助于