如何将视图/模型中的任何方法作为芹菜任务

时间:2016-09-14 12:07:37

标签: python django celery django-celery

我在models.py class Analytics下的Analytics.record_read_analytics()中有一些分析方法(例如:tasks.py)。我们正在调用那些记录分析的方法,这些方法并不需要同步。目前,它影响了每个请求的呈现,因此决定在芹菜队列中添加这些方法。我们已经在使用芹菜执行某些任务,因此我们有celery.pymodels.py个文件。

以下是class Analytics(): ... ... @staticmethod def method_a(): ... ... def method_b(): ... ... @staticmethod def record_read_analytics(): ... ... 文件的一部分:

tasks.py

我不想在celery.py中再次编写相同的模型级方法,并希望将一些视图方法和模型级方法作为芹菜任务。

以下是from __future__ import absolute_import from celery import Celery app = Celery('gnowsys_ndf', include=['gnowsys_ndf.tasks']) app.config_from_object('gnowsys_ndf.celeryconfig') if __name__ == '__main__': app.start() 档案:

celery

我是1111111的新手,正在寻求帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用methods创建任务。关于这一点的坏处是对象本身被传递(因为worker中对象的状态必须与调用者的状态相同)才能被调用,因此你失去了一些灵活性。所以你的对象每次都要被腌制,这就是我反对这个解决方案的原因。 当然这只涉及类方法,静态方法没有这样的问题。

我喜欢的另一个解决方案是创建单独的tasks.py或基于类的任务,并从中调用方法。这样,您就可以完全控制工作人员中的Google Analytics对象。

答案 1 :(得分:0)

你可以像:

那样实现
analytics = Analytics()   # Object of Analytics class
Analytics.record_read_analytics.delay()

此外,您需要使用@task函数

添加record_read_analytics装饰器