<p>昨晚凌晨兩點,小編接到女神的電話,心里正心猿意馬,沒想到電話中的女神竟帶著哭腔和我說老板讓她現在就去公司加班,我很好奇的問她什么事情要這么晚去?女神委屈的說:“因為我們公司這個產品是針對美國用戶,存在時差”說完又哭了起來。唉,小編心想終于有機會在女神面前露一手了,聽我慢慢道來。</p><p>在開發(fā)一個自動化測試平臺,其中有一個功能是必不可少的,那就是定時任務調度。比如現在你的項目需要凌晨2點跑測試,你一個女孩子不可能真的2點鐘起床跑到公司去執(zhí)行測試吧,這時候定時任務就顯得尤為重要,可以說是作為一個測試平臺的標配了
</p><p>用 Python定時任務實現的技術手段有很多,現在市面上主流的方式有四種。簡單做個羅列說明:
</p><ol><li><p>Linux系統(tǒng)級別的?crontab。</p></li><li><p>Python的?schedule庫。</p></li><li><p>Celery定時任務。</p></li><li><p>Python的?APScheduler庫。</p></li></ol><p>以上四種方式都可以實現定時任務,我對這四種實現定時任務的技術都進行了研究。這里給大家嘮嘮該如何選擇。</p><h2>一、?Linux系統(tǒng)的?crontab:</h2><p>Linux系統(tǒng)的 crontab非常好用,固定的間隔時間執(zhí)行指定的系統(tǒng)指令或 shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。這個命令非常適合周期性的日志分析或數據備份等工作。但是他有個不好的是,如果我們項目比較復雜,涉及多臺服務器,那么一旦需要修改某個任務調度的策略,將變得非常麻煩。所以用一句話總結 crontab就是:crontab雖好,可不要貪服務器哦~</p><h2>二、?Python的?schedule庫:</h2><p>schedule庫是一個輕量級的定時任務方案。優(yōu)勢是使用簡單,可以直接上手,基本不需要做什么配置。缺點是,因為比較輕量,導致他的功能比較局限,比如無法動態(tài)的添加任務,無法將任務的結果進行持久化等。這里做個簡單介紹:</p><h3>1. 安裝:</h3><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-4e054d04c4edfad2.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><h3>2. 基本使用:</h3><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-929093b32a30d09e.png" class="uploaded-img" width="auto" height="auto"><img src="https://upload-images.jianshu.io/upload_images/6620012-a608f71de2cba3c5.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><p>通過閱讀代碼,可以發(fā)現 schedule用起來是非常簡單和方便的,對于不需要動態(tài)添加任務,不需要存儲任務等的定時任務,直接用 schedule來實現。簡單,高效!</p><h2>三、?Celery庫:</h2><p>Celery在異步任務和定時任務兩個方面可以說是非常出名。他性能穩(wěn)定,功能強大,在中大型項目中扮演著重要的角色。但是 Celery也無法動態(tài)的添加任務( Django中有相應的插件可以實現動態(tài)任務),而且對于之前沒有使用過 Celery的項目,單獨因為定時任務而搭建一套 Celery系統(tǒng)顯得會有點大材小用的感覺,因為搭建 Celery還得配一個 Broker, Broker一般是 Redis或者 RabbitMQ,所以比較重量級,也比較浪費資源。</p><h3>1. 安裝:</h3><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-9fb10ff38102d6be.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><h3>2. 簡單實用:</h3><p>這里簡單的來看看用 Celery是如何添加定時任務的:</p><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-91e8597cc909fe79.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><p>要執(zhí)行 celery的定時任務,我們需要打開兩個終端,一個用來監(jiān)聽定時任務,一個用來執(zhí)行定時任務。命令分別如下:</p><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-01e10693f21b8f36.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><h2>四、?APScheduler庫:</h2><p>APScheduler庫個人來說是比較好用的,他不僅使用簡單,功能還比較強大,比如支持動態(tài)添加和刪除任務,支持持久化,持久化的方式還有很多選擇,比如 內存、 MongoDB、 SQLAlchemy、 Redis等,也針對一些常用的框架做了接口,比如有asyncio調度器、 gevent調度器等。接下來我們來嘮嘮。</p><h3>1. 安裝:</h3><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-1d31a0facdee72f7.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><h3>2. 簡單實用:</h3><p>這里我們用默認的調度器 BlockingScheduler來做一個定時任務:</p><ol><li><p><img src="https://upload-images.jianshu.io/upload_images/6620012-faf02002dfd53fae.png" class="uploaded-img" width="auto" height="auto"><img src="https://upload-images.jianshu.io/upload_images/6620012-7ea7537d7923ad6d.png" class="uploaded-img" width="auto" height="auto">
</p></li></ol><p>可以看到,任務實用起來非常的簡單,他有 schduler.add_job函數,可以動態(tài)的添加任務,操作起來非常的方便。另外還有 BackgroundScheduler、 AsyncIOScheduler等。</p><p>聽我說完,女神終于破涕為笑,嬌嗔著一直夸我好有才,哈哈,還好我自動化測試學得好,總算離女神又近了一步??!</p><p>小編真是情場事業(yè)雙得意,學好自動化,讓你們也能輕松搞定女神!</p><p>定時任務很常用,因此選好解決方案尤其重要。今天因為篇幅有限,只針對幾個定時庫做個科普性的介紹,如果你想了解某個具體的庫,可以在評論區(qū)留言,我可以針對某個庫展開來說一說。</p><p>另外,個人覺得, APScheduler是我比較滿意的方案,用起來簡單,輕量級,功能也很強大。所以我在我的測試平臺上,用的就是 APScheduler的方案來解決的。如果你也想學習<strong>API自動化測試平臺</strong>開發(fā),歡迎花個1分鐘的時間了解下:</p><p><img src="https://upload-images.jianshu.io/upload_images/6620012-c8820e8d8d8ac60b.jpeg" class="uploaded-img" width="auto" height="auto"><img src="https://upload-images.jianshu.io/upload_images/6620012-2bb3f34a5b361f8b.jpeg" class="uploaded-img" width="auto" height="auto"></p>
Python定時任務最全解決方案
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。