詳解Python如何輕松實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)
下面這個(gè)截圖,就是使用 schedule 定時(shí)執(zhí)行 Notebook 的例子
import schedule import time import papermill as pmdef job(): pm.execute_notebook( 'input.ipynb', 'logs/oo.ipynb' ) schedule.every(10).seconds.do(job) while True: schedule.run_pending() time.sleep(1)
所需要的包就這么幾個(gè)(ipywidgets 是為了顯示進(jìn)度條,就不多做介紹了),
pip install schedule papermill ipywidgets
下面分別介紹下各個(gè)包的用途。
schedule
從官方提供的例子可以看出,只要會(huì)基本的英語(yǔ)就能明白如何方便定時(shí)了
import schedule import time # 要執(zhí)行的任務(wù) def job(): print("I'm working...") #每隔10s執(zhí)行job schedule.every(10).seconds.do(job) #每隔10分鐘執(zhí)行job schedule.every(10).minutes.do(job) #每小時(shí)執(zhí)行job schedule.every().hour.do(job) #在每天10:30分執(zhí)行job schedule.every().day.at("10:30").do(job) #每5到10分鐘(隨機(jī)數(shù))執(zhí)行job schedule.every(5).to(10).minutes.do(job) #每星期一執(zhí)行job schedule.every().monday.do(job) #每星期三13:15執(zhí)行job schedule.every().wednesday.at("13:15").do(job) #每天歐洲阿姆斯特丹時(shí)區(qū)的12:42執(zhí)行job schedule.every().day.at("12:42", "Europe/Amsterdam").do(job) #在每分鐘的第17秒開(kāi)始執(zhí)行job schedule.every().minute.at(":17").do(job) def job_with_argument(name): print(f"I am {name}") #每10秒鐘執(zhí)行一次job_with_argument(帶參數(shù)) schedule.every(10).seconds.do(job_with_argument, name="Peter") while True: schedule.run_pending() time.sleep(1)
更多應(yīng)用可以看官方文檔[1]。
如果你只是在 Python 代碼里定時(shí)一個(gè)或者多個(gè)工作,你并不需要 papermill,使用 papermill,是為了可以方便地定時(shí)執(zhí)行你的 Notebook。
papermill
papermill[2]是一個(gè)用于參數(shù)化、執(zhí)行和分析 Jupyter Notebooks 的工具。
也許您有一份財(cái)務(wù)報(bào)告,您希望在一個(gè)月的第一天或最后一天或一年的開(kāi)始或結(jié)束時(shí)使用不同的值運(yùn)行,使用參數(shù)可以使這項(xiàng)任務(wù)更容易。你想運(yùn)行一個(gè) Notebook 并根據(jù)它的結(jié)果,選擇一個(gè)特定的 Notebook 來(lái)運(yùn)行嗎?您現(xiàn)在可以以編程方式 執(zhí)行工作流程,而無(wú)需手動(dòng)從筆記本復(fù)制和粘貼到筆記本。
我們即可以像上面的例子那樣以 API 的方式使用,也可以以命令行的方式來(lái)運(yùn)行,例如, 運(yùn)行本地input.ipynb,參數(shù)分別為alpha和l1_ratio把結(jié)果保存到 AWS 的 s3 上,
papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1
使用下面這段代碼,我們可以把 notebook 中 print 輸出轉(zhuǎn)移輸出到日志里,
from datetime import datetime from datetime import timedelta import logging, sys,re #日志的名字以時(shí)間命名,方便查找 _date_start = (datetime.now() +timedelta(hours=0)).strftime('%Y-%m-%d %H:%M:%S') xxx = re.sub(r'[-\ \:]','',_date_start) filename=f'logs/{xxx}.log' #日志的基本設(shè)置 logging.basicConfig(filename=filename, level=logging.DEBUG , format="%(asctime)s - %(name)s - %(levelname)s - %(message)s") logger = logging.getLogger() # 將print轉(zhuǎn)移輸出到日志中 sys.stderr.write = logger.error sys.stdout.write = logger.info
參考資料
[1]官方文檔: https://schedule.readthedocs.io/
[2]papermill: https://github.com/nteract/papermill
到此這篇關(guān)于詳解Python如何輕松實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的文章就介紹到這了,更多相關(guān)Python定時(shí)執(zhí)行任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python selenium如何打包靜態(tài)網(wǎng)頁(yè)并下載
這篇文章主要介紹了Python selenium如何打包靜態(tài)網(wǎng)頁(yè)并下載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python復(fù)制Excel表格中指定數(shù)據(jù)若干次的方法
本文介紹基于Python語(yǔ)言,讀取Excel表格文件數(shù)據(jù),并基于其中某一列數(shù)據(jù)的值,將這一數(shù)據(jù)處于指定范圍的那一行加以復(fù)制,并將所得結(jié)果保存為新的Excel表格文件的方法,需要的朋友可以參考下2024-02-02通過(guò)pykafka接收Kafka消息隊(duì)列的方法
今天小編就為大家分享一篇通過(guò)pykafka接收Kafka消息隊(duì)列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python判斷一個(gè)集合是否為另一個(gè)集合的子集方法
下面小編就為大家分享一篇python判斷一個(gè)集合是否為另一個(gè)集合的子集方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python 中urls.py:URL dispatcher(路由配置文件)詳解
這篇文章主要介紹了Python 中urls.py:URL dispatcher(路由配置文件)詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Python的numpy庫(kù)下的幾個(gè)小函數(shù)的用法(小結(jié))
這篇文章主要介紹了Python的numpy庫(kù)下的幾個(gè)小函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python爬蟲(chóng)之爬取谷歌趨勢(shì)數(shù)據(jù)
這篇文章主要介紹了python爬蟲(chóng)之爬取谷歌趨勢(shì)數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲(chóng)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04