经常用python开发web应用时,会涉及到定时任务的脚本,以前用linux自带的crontab来操作,但是感觉不太接地气,后来发现用celery+django 可以方便的实现!
安装软件环境如下:
python 2.7.5
Django==1.8.2
celery==3.1.18
celery-with-redis==3.0
django-celery==3.1.16
MySQL-python==1.2.3
supervisor==3.1.3
使用pip方式安装完以上软件,并且默认系统已经安装了redis和mysql服务器!
一 首先创建project:
django-admin.py createproject picha
然后创建名称为demo的app:
django-admin.py startapp demo
项目的目录结构为:
二 下面在settings文件中配置celery相关的配置:
from .celery
import
app as celery_app
os.environ.setdefault(
'DJANGO_SETTINGS_MODULE'
,
'picha.settings'
)
app = Celery(
'picha'
)
app.config_from_object(
'django.conf:settings'
)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print(
'Request: {0!r}'
.
format
(self.request))
三 我现在开始配置supervisor,用来启动相关celery程序:
1)初始化supervisor配置文件!
echo_supervisord_conf > /etc/supervisord.conf
2)然后在supervisord.conf文件末尾添加如下配置:
[program:djangoproject.celeryd]
command
=
/usr/local/pyenv/shims/python
/usr/local/coding/pythoner/picha/manage
.py celeryd --concurrency=1
user=root
numprocs=1
directory=
/usr/local/coding/pythoner/picha
stdout_logfile=
/var/log/celery_worker
.log
stderr_logfile=
/var/log/celery_worker
.log
autostart=
true
autorestart=
true
startsecs=10
stopwaitsecs = 120
priority=998
[program:djangoproject.celerybeat]
command
=
/usr/local/pyenv/shims/python
/usr/local/coding/pythoner/picha/manage
.py celery beat --schedule=
/tmp/celerybeat-schedule
--pidfile=
/tmp/django_celerybeat
.pid --loglevel=INFO
user=root
numprocs=1
directory=
/usr/local/coding/pythoner/picha
stdout_logfile=
/var/log/celery_beat
.log
stderr_logfile=
/var/log/celery_beat
.log
autostart=
true
autorestart=
true
startsecs=10
stopwaitsecs = 120
priority=998
[program:djangoproject.celerycam]
command
=
/usr/local/pyenv/shims/python
/usr/local/coding/pythoner/picha/manage
.py celerycam --frequency=10.0
user=root
numprocs=1
directory=
/usr/local/coding/pythoner/picha
stdout_logfile=
/var/log/celerycam
.log
stderr_logfile=
/var/log/celerycam
.log
autostart=
true
autorestart=
true
startsecs=10
stopwaitsecs = 120
priority=998
查看服务是否启动成功,使用命令
supervisorctl status
djangoproject.celerybeat RUNNING pid 3061, uptime 1:03:27
djangoproject.celerycam RUNNING pid 3063, uptime 1:03:27
djangoproject.celeryd RUNNING pid 3062, uptime 1:03:27
然后我们进入到django-admin后台,
现在我们启动django:
python manage.py runserver 0.0.0.0:8008
进入后台后,点击“Periodic tasks”:
可以看到写在tasks.py下面的方法,在下拉菜单中都出现了,我们只用选择对应的时间即可!
现在,我们开始选择计划任务的时间:
我们创建一个定时任务,没10s,print一个数值,放在在日志文件中查看:
我们查看日志文件:
符合我们在web后台的设置!
我们在设置一个加法运算,每隔15s运行一次,而且我们可以在web平台后端动态的修改所传的参数,
第一次,我们传入参数9和5,结果应该为14,我们看下设置和日志:
我再看下日志:
然后我们在web后台修改传入参数为10和7,不重启服务,计算的结果动态变化为17!
我们发现,结果数据已经动态变化!
我们如果启动了 supervisor脚本中的:/usr/local/coding/pythoner/picha/manage.py celerycam --frequency=10.0
就可以在admin后台查看 woker是不是在线:
celery-django相关的配置就完成了!
PS:配置过程中计划任务的结果只能日志中查看,不知道怎么在admin的后台中显示,如果大家知道,可以告诉我,3Q!
在admin.py文件中声明:❤️
manage的startapp命令在创建post应用的时候会自动创建admin.py文件,想要把自定义的Model注册到管理后台,就需要在这个文件中进行声明:
用户反馈管理功能,是对前端用户反馈的问题进行展示,并可实现删除功能。是一个很实用的功能,也算是当代网站的标配。它可以实时的跟踪到用户对网站的各种意见和吐槽,开发者能及时修缮网站功能或者修改网站bug。
本讲我们会讲到一些关于发邮件的技术。我们知道,订阅功能是一个很常见的功能,当用户订阅某个网站后,网站会通过后台给用户发送网站最新的一些动向,一般是通过邮件来发送的。当你阅读完本节内容,会对发邮件的流程有一个大概的了解。
照例我们先添加评论管理的相关路由
path('comment_list/', views.CommentListView.as_view(), name='comment_list'),
path('comment_delete/', views.comment_delete, name='comment_delete'),
首先是评论列表的展示,我们通过CommentListView视图类来实现,该类依然是继承ListView来实现的。
从本讲开始,我们开始视频管理功能的开发,视频管理包括视频上传、视频列表、视频编辑、视频删除。另外还有视频分类的功能,会一同讲解。这一讲非常重要,因为你将学习到一些之前没有学过的技术,比如大文件上传技术。
从本讲起,我们会介绍后台管理系统的开发,后台管理,主要是对数据库中的数据进行增、删、改、查的操作,满足网站管理员对网站的管理与维护的需求。
其实,django自带的也有一个后台管理系统(/admin),但是自带的后台非常简陋,无论是界面,还是功能上,都无法满足用户的需求,因此,我们自己开发了一套后台管理系统。