
大家好,我是皮皮。
一、前言
前幾天在Python白銀交流群【魚開溜??】問了一個Python定時任務的問題,提問截圖如下:

下面是他的代碼:
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler(timezone='Asia/Shanghai')
def job_func1():
print("1")
scheduler.add_job(job_func1, id='001', name='test1', trigger='interval', seconds=1)
def main():
scheduler.start()
scheduler.print_jobs()
if name == 'main':
main()
二、實現過程
這里需要先安裝apscheduler庫,不然會報錯。

這里【dcpeng】給了一個解決辦法,把那個interval參數去除就好了。
不過沒那個參數,實現不了定時功能。

不過也不要慌,這里有相關參數說明。

所以需要定時任務的話,定時任務器的參數可以參考下面進行設置。
scheduler.add_job(my_task, trigger="date",
run_date=date(2019, 6, 10),
args=("mashiro", 17),
kwargs={"gender": "女"})
scheduler.add_job(my_task,
trigger="date",
run_date=datetime(2019, 6, 9, 17, 14, 4),
args=("mashiro", 17),
kwargs={"gender": "女"})
scheduler.add_job(my_task,
trigger="date",
run_date="2019-6-9 17:14:05",
args=("mashiro", 17),
kwargs={"gender": "女"})
未指定日期,則會立即執行
scheduler.add_job(my_task,
args=("mashiro", 17),
kwargs={"gender": "女"})
如此一來,問題就得到解決了。
粉絲想要實現的功能是,類似于linux的crontab,想要在特定時間范圍或者時間間隔下跑某些函數,查到功能比較強大的apscheduler,有兩種方式實現我需要的功能:①是有進程阻塞的BlockingSchedul ②是無進程阻塞的BackgroundScheduler。差別在于時間差,粉絲想的是如果有多條進程需要同時跑,要么異步,要么用無進程阻塞的,故選了方式②,提供的代碼如下。

可以看到這里,針對參數做了修改,之前寫法是trigger=interval,這里把時間間隔放到前面,在這個時間范圍內,1秒執行一次。并在主程序加上死循環,一直處于掛起狀態循環,類似于只用Scheduler的,可以得到如下結果:

三、總結
大家好,我是皮皮。這篇文章主要盤點了一個Python定時任務的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。