Django异步任务之Celery的基本使用
Celery
许多Django应用需要执行异步任务,以便不耽误httprequest的执行.我们也可以选择许多方法来完成异步任务,使用Celery是一个比较好的选择,因为Celery有着大量的社区支持,能够完美的扩展,和Django结合的也很好.Celery不仅能在Django中使用,还能在其他地方被大量的使用.因此一旦学会使用Celery,我们可以很方便的在其他项目中使用它.
celery是一个用于实现异步任务的库,在很多项目中都使用它,它和django融合使用很完美.使用celery可以在实现httprequest请求返回view前做一些我们想做的而且耗时的事情而不会让用户等待太久
环境
django版本==1.11.6
celery版本==3.1.25
安装
pipinstalldjango-celery pipinstallcelery
首先需要将celery添加到django项目的settings里,celery任务和django需要一个中间人(broker),,这里使用的是django自带的broker,但在生产中一般使用rabbitmq,Redis等,在INSTALLED_APP中需要添加djcelery和kombu.transport.django,还有app应用。
-project/project/settings.py:
importdjcelery djcelery.setup_loader() BROKER_URL='django://' INSTALLED_APP=( ... 'app' 'djcelery', 'kombu.transport.django', )
新建celery.py创建一个celery应用,并添加以下内容
-project/project/celery.py:
#相对路径导入,防止导入celery时冲突 from__future__importabsolute_import importos fromceleryimportCelery fromdjango.confimportsettings #让celery能找到django项目 os.environ.setdefault('DJANGO_SETTINGS_MODULE','project.settings') #创建一个celery应用 app=Celery('project') #导入配置 app.config_from_object('django.conf:settings') #自动发现task app.autodiscover_tasks(lambda:settings.INSTALLED_APPS) @app.task(bind=True) defdebug_task(self): print('Request:{0!r}'.format(self.request))
-project/project/__init__.py:
from__future__importabsolute_import #Thiswillmakesuretheappisalwaysimportedwhen #Djangostartssothatshared_taskwillusethisapp. from.celeryimportappascelery_app
在djangoapp中添加任务,文件名必须是tasks.py,在普通python函数前加一个@task()装饰器就变成了celerytask
-project/app/tasks.py:
fromcelery.taskimporttask fromtimeimportsleep @task() defhelloWorld(): print'helloWorld' sleep(10) print'helloWorld' return'helloCelery'
这样,一个任务就创建成功了,只剩下在view中调用了
-project/appview.py:
fromtasks.pyimporthelloWorld defhome(): helloWorld.delay() returnHttpResponse('helloCelery')
最后
pythonmanage.pymigrate
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。