您好,登錄后才能下訂單哦!
本篇內容介紹了“Django定時任務實現方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
為了做一些報表,最近需要每日從愛站上抓取競爭對手的百度流量和移動流量,從我能實現的技術來看,大致有三種實現形式:
火車頭定時抓取;
python+crontab定時抓取,保存在txt或cav或數據庫中;
django定時任務,用admin系統或模板系統展現。
第一種不熟悉,還要摸索;第二種數據展現還要自己寫,如果用數據庫,還要用很原始的連接方式,至少用了django之后是這樣;第三種優點是可以用admin系統或模板系統來,缺點是定時任務不熟悉。但考慮到打算深入學習django,于是決定用第三種方式來實現。
Django的定時任務基本也有三種實現形式:
django-celery
Django的command+crontab
一些第三方庫,如django-crontab
首先,看了下django-celery的官方教程,celery還是比較龐大的,而且教程比較復雜,沒耐心的我就先行跳過了;
其次,又看了Django關于command的官方文檔,實現了command+crontab的形式。但因為是在virtualenv下部署,一直無法實現。即便crontab中已經設置了先進入virtualenv再運行command仍然失敗了(crontab中語法是source /home/../bin/activate && python /home/.../manage.py aizhan_visits)。
最后,選擇了第三方庫django-crontab,竟意外的實現了Django在virtualenv下的的定時任務。。
django-crontab安裝:
pip install django-crontab
django-crontab加入:只需要將django-crontab加入到settings.py的INSTALLED_APPS即可。如下代碼:
INSTALLED_APPS = ( 'django-crontab', ... )
django-crontab可以定時運行自定義命令和函數兩種方式,因為之前嘗試用command+crontab時已經實現了自定義command,所以自然而然使用了自定義命令這種形式。
我先參考Django官方文檔自定義了一個命令aizhan_5domain_visits,專門用于抓取愛站流量,并將結果保存在sqlite3數據庫中(具體步驟在本文中不贅述了)。
其次,我在settings.py中加入了django-crontab的命令:
CRONJOBS = [ ('47 11 * * *', 'django.core.management.call_command', ['aizhan_5domain_visits']), ]
意思就是每天11點47分運行aizhan_5domain_visits這個命令。接下來就剩最后一步任務加載了。
django-crontab也可以定時運行函數,只是在CRONJOBS配置時有差別。CRONJOBS關于函數的配置如下:
分析結果:
初級模式很直觀,意思就是每五分鐘執行一次my_scheduled_job這個程序;
中級模式有個后綴,意思是將程序my_scheduled_job的結果輸出到文件/tmp/last_scheduled_job.log中;
高級模式加入了參數,其中['dumpdata', 'auth']和{'indent': 4}都是參數,只是[]中的參數是按照順序代入,而{}中的參數指定了變量名稱,最后一個也是輸出結果的后綴。
django-crontab任務加載比較簡單,只需要運行python manage.py crontab add即可。如果你運行crontab -e可以看到crontab中多了一行:
* * * /home/aizhan/bin/python /home/aizhan/aizhan/manage.py crontab run c27d1050fb7f87225bcff587ef5a35a3 # django-cronjobs for aizhan
這是django-crontab自動生成的。
如果要移除所有的任務,則運行python manage.py crontab remove;
當你修改了任務,需要再次運行python manage.py crontab add。
“Django定時任務實現方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。