到目前为止,小说追踪功能已经差不多完成了,但现在小说只有在初次加入追踪时会记录相关资料。
为了能定期自动更新资料,我们将使用Django-Q,其可以达到排程、任务伫列(task queue)功能。
除了Django-Q外,Celery也是一个常被人使用的类似套件,但因为Django-Q在Django管理网站的使用介面对我而言比较便利,且我的需求也没复杂到可以比较两个套件的差异,故就暂时先不考虑使用Celery。
补充:在找资料的时候,在有看到一些比较早的讨论有提到Django-Q在windows执行会发生问题,但并没有一份正式文件有声明其不支援windows,经过今天的测试也都没问题,故可能此问题已在新版本修正。
Django-Q使用Redis做为消息代理 (message broker),故要使用Django-Q的话,执行环境必须事先安装好Redis。
pip install django-q
在INSTALLED_APPS加入django_q,并另外加入Q_CLUSTER的设定,其中也包含了Redis的连线资讯:
INSTALLED_APPS = [
'django_q',
]
# django-q configuration
Q_CLUSTER = {
'name': 'django_q_bookhelper',
'workers': 8,
'recycle': 500,
'timeout': 60,
'compress': True,
'save_limit': 250,
'queue_limit': 500,
'cpu_affinity': 1,
'label': 'Django Q',
'redis': {
'host': '127.0.0.1',
'port': 6379,
'db': 0, }
}
完成设定後,执行migrate,更新资料库。
为了方便管理,另外新建services.py,里面包含了待排程的相关功能:
from crawler.bookcrawler import BookCrawler
from datetime import datetime
from .models import Book
# function for schedule
def UpdateTrackInformation():
booklist = Book.objects.filter(istrack=True)
for book in booklist:
crawler = BookCrawler(book.oriurl)
crawler.getinfo()
Book.objects.filter(bookid=book.bookid).update(title=crawler.title, totalsection=crawler.totalsection, bookstatus=crawler.bookstatus, updatetime=datetime.now())
登入管理网站,现在出现了Django-Q的资料管理。
选择新增,加入刚刚完成的function。
Django-Q除了定时排程外,也可以用来处理非同步任务,在这个情境下,前面使用管理网站的方法就不敷使用。
使用程序码的方法:
from django-q.task import async_task
async_task("track.services.UpdateTrackInformation")
# async_task(func, args)
当以上设定完成後,除了启动网站外,要另外启动qcluster。
python manage.py qcluster
透过管理网站,可以简单看到排程执行的状况:
<<: D22 - 彭彭的课程# Python 乱数与统计模组(2)
找了一下发现在「内政资料开放平台」中有「10706全国乡镇市区前二十大姓人口数按性别」的资料集。 今...
了解昨天提到的主从运作流程後,今天来实际搭建主从架构~ 在前面我们起了一台VM当作Master,现在...
量化交易30天 本系列文章是纪录一位量化交易新手的学习过程,除了基础的Python语法不说明,其他...
系统上下文图 System Context Diagram (SCD) 是一种概念图的呈现,用於表达...
大型数字 ( 图形数字 ) 教学原文参考:大型数字 ( 图形数字 ) 如果要在 Scratch 3 ...