![](/img/trans.png)
[英]Create Object (in ViewSet class) with Celery Task in Django
[英]Create class based Celery task for reusable app in Django project
對於Django項目,創建基於函數的任務非常干凈。 只需在Django應用中創建task.py並開始編寫此示例,就可以從http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html的官方celery文檔中獲取此示例
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task
def add(x, y):
return x + y
@shared_task
def mul(x, y):
return x * y
但是有時基於功能的任務緊密結合在一起,並且不太可重用。 所以我想創建基於類的芹菜任務,該任務已在官方網站上進行了記錄。 在遵循https://github.com/celery/celery/issues/3874之后,我可以創建示例任務,但是我不確定它是否是創建基於類的任務的正確方法。
from __future__ import absolute_import, unicode_literals
from celery import shared_task, Task
import time
from celery import current_app
@shared_task
def add(x, y):
time.sleep(5)
return x + y
@shared_task
def mul(x, y):
return x * y
# Sample class based task for testing
class AnotherTask(current_app.Task):
name = 'tasks.another_task'
def __init__(self, x, y):
self.x = x
self.y = y
def run(self):
time.sleep(5)
return self.x + self.y
# We need to manually register this class based task
current_app.tasks.register(AnotherTask(3, 4))
我可以調用此任務,但每個調用結果值都相同
(workflow) alok@alok-MacBookAir:~/exp/expdjango/mysite$ ./manage.py shell
Python 3.6.3 (default, Oct 3 2017, 21:45:48)
Type "copyright", "credits" or "license" for more information.
IPython 5.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: from polls.tasks import *
In [2]: r = AnotherTask(3,4).delay()
In [3]: r.get()
Out[3]: 7
In [4]: r = AnotherTask(5,6).delay()
In [5]: r.get()
Out[5]: 7
這是創建和調用基於類的任務的正確方法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.