Python 如何将视图/模型中的任何方法作为芹菜任务
我在Python 如何将视图/模型中的任何方法作为芹菜任务,python,django,celery,django-celery,Python,Django,Celery,Django Celery,我在class analytics下的models.py中有一些分析方法(例如:analytics.record\u read\u analytics())。我们调用这些方法来记录分析,而不需要同步。目前它正在影响每个请求的呈现,所以决定在芹菜队列中添加这些方法。我们已经在为一些任务使用芹菜,因此我们有tasks.py和cellery.py文件 以下是models.py文件的一节: class Analytics(): ... ... @staticmethod
class analytics
下的models.py
中有一些分析方法(例如:analytics.record\u read\u analytics()
)。我们调用这些方法来记录分析,而不需要同步。目前它正在影响每个请求的呈现,所以决定在芹菜队列中添加这些方法。我们已经在为一些任务使用芹菜,因此我们有tasks.py
和cellery.py
文件
以下是models.py
文件的一节:
class Analytics():
...
...
@staticmethod
def method_a():
...
...
def method_b():
...
...
@staticmethod
def record_read_analytics():
...
...
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()
我不想在tasks.py
中再次编写相同的模型级类方法,而是想将一些视图方法和模型级类方法作为芹菜任务
下面是芹菜.py
文件:
class Analytics():
...
...
@staticmethod
def method_a():
...
...
def method_b():
...
...
@staticmethod
def record_read_analytics():
...
...
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()
我是新来的
芹菜
,正在寻求帮助。提前感谢您。您可以通过以下方式实现:
analytics = Analytics() # Object of Analytics class
Analytics.record_read_analytics.delay()
此外,您还需要添加
@task
装饰器,该装饰器具有记录\读取\分析
功能您可以从中创建任务。这样做的坏处在于,为了调用对象,对象本身被传递(因为worker中对象的状态必须与调用方的状态相同),因此失去了一些灵活性。所以你的物体每次都要被腌制,这就是为什么我反对这个解决方案当然,这只涉及类方法,静态方法没有这样的问题。
我喜欢的另一个解决方案是创建单独的tasks.py或基于类的任务,并从其中调用方法。这样,您就可以完全控制worker中的分析对象。将对象参数传递给芹菜函数会产生错误,但我看不到,因此用于发现问题并正确指出。还要感谢@khajvah和Moinuddin提供了一些有用的更正。现在它工作得很好!我试过了,但任务并没有进入芹菜队列。实际上,任务没有得到注册。检查您运行的message broker服务是否是上面的代码引发了一些错误或未执行任何操作就退出了?还要检查您是否包含了
models.py
,即include=['gnowsys\u ndf.tasks','models.py']
是。我同意卡伊瓦的观点。您还需要重新启动芹菜服务,以使这些更改器反映芹菜进程