标签:guide www. 定时 接下来 配置 man 目的 span lambda
这几天想要在练习的Django项目中使用celery来完成一个定时的功能,但是因为前辈们的教程大都年代久远我在配置celery的过程中遇到了很多麻烦。因此我在配置完成后写下这篇文章,来记录如何配置,也希望可以帮助到其他人。
Ubuntu 16.04
Python 3.5
Django 2.1
Celery 4.2
使用Python2的的过程也差不多,有一些不同,可以参考First steps with Django。
安装django-celery
pip install celery
pip install django-celery
然后我们需要有一个broker来接收和发送队列消息
sudo apt-get install rabbitmq-server
-MediaApp
-accounts
-tasks.py
...
-MediaApp
-__init__.py
-celery.py
-settings.py
...
(...是无关的部分所以略去
file:MediaApp/MediaApp/celery.py
import os from celery import Celery from django.conf import settings os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘MediaApp.settings‘)
#Celery的参数是你当前项目的名称 app = Celery(‘MediaApp‘)
#这一步让你可以在django的settings.py中配置celery app.config_from_object(‘django.conf:settings‘)
#celery会自动在你注册的app中寻找tasks.py,所以你的tasks.py必须放在各个app的目录下并且不能随意命名 app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
#这步暂时还不懂在做什么 @app.task(bind=True) def test(self): print(‘Request:{0!r}‘.format(self.request))
fle:MediaApp/MediaApp/__init.py__.py
from .celery import app as celery_app __all__=(‘celery_app‘,)
#这一步会确保当Django项目运行时这个app总是被import
fle:MediaApp/MediaApp/settings.py
djcelery.setup_loader() BROKER_URL = ‘pyamqp://‘ CELERY_RESULT_BACKEND = ‘rpc://‘
如果要使用其他的broker或者backend可以参考官方文档
接下来添加一个小小的task来测试一下
fle:MediaApp/accounts/tasks.py
from celery import shared_task @shared_task def tset(): print(‘success‘)
先运行服务器
python manage.py migrate
python manage.py runserver
然后启动worker
celery -A MediaApp worker -c 4 --loglevel=info
在项目的目录下打开终端
python manage.py shell
>>> from accounts.tasks import test
>>> test.delay()
如果你看到
<AsyncResult: a3ffd81b-5a6d-4734-bd82-7b5936a379d2>
在启动woker的终端看到
[2018-09-05 14:55:48,937: INFO/MainProcess] Received task: accounts.tasks.test[d3d737d9-4945-464d-a1a2-fe8c4f9c0b13] [2018-09-05 14:55:48,938: WARNING/Worker-1] success [2018-09-05 14:55:48,946: INFO/MainProcess] Task accounts.tasks.test[d3d737d9-4945-464d-a1a2-fe8c4f9c0b13] succeeded in 0.008688600999448681s: None
那么就是完成了。
标签:guide www. 定时 接下来 配置 man 目的 span lambda
原文地址:https://www.cnblogs.com/HanLixiang/p/9592157.html