我在models.py
class Analytics
下的Analytics.record_read_analytics()
中有一些分析方法(例如:tasks.py
)。我们正在调用那些记录分析的方法,这些方法并不需要同步。目前,它影响了每个请求的呈现,因此决定在芹菜队列中添加这些方法。我们已经在使用芹菜执行某些任务,因此我们有celery.py
和models.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
的新手,正在寻求帮助。提前谢谢。
答案 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
装饰器