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”即可免費領取。



分享到:


相關文章: