一.项目中使用celery
我的项目目录:
TestCelery/ ├── proj │ ├── celeryconfig.py │ ├── celery.py │ ├── init.py │ └── tasks.py └── test.py
celery.py内容如下:
from celery import Celery
# 创建celery实例
app = Celery('demo')
app.config_from_object('proj.celeryconfig')
# 自动搜索任务
app.autodiscover_tasks(['proj'])
celeryconfig.p模块内容如下:
from kombu import Exchange, Queue
BROKER_URL = 'redis://:332572@127.0.0.1:6379/1'
CELERY_RESULT_BACKEND = 'redis://:332572@127.0.0.1:6379/2'
tasks.py模块内容如下:
from proj.celery import app as celery_app
# 创建任务函数
@celery_app.task
def my_task1():
print("任务函数(my_task1)正在执行....")
@celery_app.task
def my_task2():
print("任务函数(my_task2)正在执行....")
@celery_app.task
def my_task3():
print("任务函数(my_task3)正在执行....")
启动worker:
celery -A proj worker -l info
键入ctrl+c可关闭worker.
二.调用任务(Calling Task)
调用任务,可使用delay()方法:
my_task.delay(2, 2)
也可以使用apply_async()方法,该方法可让我们设置一些任务执行的参数,例如,任务多久之后才执行,任务被发送到那个队列中等等.
my_task.apply_async((2, 2), queue='my_queue', countdown=10)
任务my_task将会被发送到my_queue队列中,并且在发送10秒之后执行。
如果我们直接执行任务函数,将会直接执行此函数在当前进程中,并不会向broker发送任何消息。
无论是delay()还是apply_async()方式都会返回AsyncResult对象,方便跟踪任务执行状态,但需要我们配置result_backend.
每一个被吊用的任务都会被分配一个ID,我们叫Task ID.
注:欢迎各路码友激情评论,指出不足,完善知识体系!同时,浏览此文章的人,我想对你说,你是最棒的,不带们。