python定时器apscheduler及一个django的小tips

类似于windows系统里的计划任务,需要按特定的时间周期,去调度执行一项任务。python里有apscheduler组件。

python定时器apscheduler及一个django的小tips


分有阻塞式与非阻塞式,如下是阻塞式,就是不需要自己去写循环。

from apscheduler.schedulers.background import BlockingScheduler

from datetime import datetime


def tick():

print('Tick! The time is: %s' % datetime.now())


if __name__ == '__main__':

scheduler = BlockingScheduler()

scheduler.add_job(tick, 'interval', seconds=3)

scheduler.start()

可以看到结果,第3秒会触发一次调用。

Tick! The time is: 2017-11-29 10:43:07.244755

Tick! The time is: 2017-11-29 10:43:10.246927

Tick! The time is: 2017-11-29 10:43:13.235098

Tick! The time is: 2017-11-29 10:43:16.243270

Tick! The time is: 2017-11-29 10:43:19.239441

这个比较简单,重点是cron形式,支持cron表达式,这种方式非常灵活。

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

Seconds Minutes Hours DayofMonth Month DayofWeek Year或

Seconds Minutes Hours DayofMonth Month DayofWeek


python定时器apscheduler及一个django的小tips


每一个域可出现的字符如下:

Seconds:可出现", - * /"四个字符,有效范围为0-59的整数

Minutes:可出现", - * /"四个字符,有效范围为0-59的整数

Hours:可出现", - * /"四个字符,有效范围为0-23的整数

DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数

Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc

DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推

Year:可出现", - * /"四个字符,有效范围为1970-2099年


如下就是每小时运行一次:

scheduler = BlockingScheduler(executors=executors)

scheduler.add_job(article_job, 'cron', hour='0/1')


python定时器apscheduler及一个django的小tips


django在docker里部署的问题及解决方案:

创建容器时用-p选项指定了容器开放的端口8000

在Docker容器里用命令python manage.py runserver启动了Django服务器

用docker ps命令得到了主机到该容器的IP映射0.0.0.0:8000

然后在主机通过浏览器访问地址localhost:8000,结果不能访问到容器里的Django


解决方案:

命令python manage.py runserver默认监听127.0.0.1:8000,但是地址127.0.0.1是一个回环地址,表示“我自己”,不能通过外部访问,只能自己访问


所以需要指定监听端口python manage.py runserver 0.0.0.0:8000,其中0.0.0.0表示监听所有地址,然后用主机的浏览器访问地址localhost:8000,该地址映射到容器的localhost:8000

好了,今天就分享到这里,希望本文对大家有所帮助,如果大家觉得有用可以点个关注支持一下谢谢!

另外多说一句,我整理了一套python系统学习教程,从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。需要这些资料的只要关注我,在后台私信回复:“01”即可免费领取。



分享到:


相關文章: