日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python定时任务启动与停止_python定时任务最强框架APScheduler详细教程

發布時間:2023/12/18 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python定时任务启动与停止_python定时任务最强框架APScheduler详细教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

APScheduler定時任務

上次測試女神聽了我的建議,已經做好了要給項目添加定時任務的決定了。但是之前提供的四種方式中,她不知道具體選擇哪一個。為了和女神更近一步,我把我入行近10年收藏的干貨免費拿出來分享給女神,希望女神凌晨2點再找我的時候,不再是因為要給他調程序了。

Python中定時任務的解決方案,總體來說有四種,分別是:crontab、 scheduler、 Celery、 APScheduler,其中 crontab不適合多臺服務器的配置、scheduler太過于簡單、 Celery依賴的軟件比較多,比較耗資源。最好的解決方案就是 APScheduler。

APScheduler使用起來十分方便。提供了基于日期、固定時間間隔以及 crontab類型的任務。還可以在程序運行過程中動態的新增任務和刪除任務。在任務運行過程中,還可以把任務存儲起來,下次啟動運行依然保留之前的狀態。另外最重要的一個特點是,因為他是基于 Python語言的庫,所以是可以跨平臺的,一段代碼,處處運行!

在這里我來給大家詳細介紹一下具體的用法。

一、安裝:

安裝非常簡單,通過 pip install apscheduler即可。

二、基本使用:

先來看一段代碼,然后再來給大家詳細講解其中的細節:

其中 BlockingScheduler是阻塞性的調度器,是最基本的調度器,下面調用 start方法就會阻塞當前進程,所以如果你的程序除了調度進程沒有其他后臺進程,那么是可以是否的,否則這個調度器會阻塞你程序的正常執行。

接下來就是定義一個 my_clock函數,這個函數就是需要定時調度的任務代碼。

然后就是實例化一個 BlockingScheduler對象,并把 my_clock添加到任務調度中。然后看 interval參數,這里用的是間隔的方式來調度,調度頻率是 seconds=3,也就是每3秒執行一次。

執行結果如下:

可以看到每隔3秒鐘的時間會執行一次。說明定時任務已經成功執行了!

在了解了 APScheduler的基本使用后,再來對 APScheduler的四個基本對象做個了解,這樣才能從全局掌握 APScheduler。

三、四個基本對象:

1. 觸發器(triggers):

觸發器就是根據你指定的觸發方式,比如是按照時間間隔,還是按照 crontab觸發,觸發條件是什么等。每個任務都有自己的觸發器。

2. 任務存儲器(job stores):

任務存儲器是可以存儲任務的地方,默認情況下任務保存在內存,也可將任務保存在各種數據庫中。任務存儲進去后,會進行序列化,然后也可以反序列化提取出來,繼續執行。

3. 執行器(executors):

執行器的目的是安排任務到線程池或者進程池中運行的。

4. 調度器(schedulers):

任務調度器是屬于整個調度的總指揮官。他會合理安排作業存儲器、執行器、觸發器進行工作,并進行添加和刪除任務等。調度器通常是只有一個的。開發人員很少直接操作觸發器、存儲器、執行器等。因為這些都由調度器自動來實現了。

四、觸發器:

觸發器有兩種,第一種是 interval,第二種是 crontab。interval可以具體指定多少時間間隔執行一次。crontab可以指定執行的日期策略。以下分別進行講解。

1. date觸發器:

在某個日期時間只觸發一次事件。示例代碼如下:

2. interval觸發器:

想要在固定的時間間隔觸發事件。interval的觸發器可以設置以下的觸發參數:weeks:周。整形。

days:一個月中的第幾天。整形。

hours:小時。整形。

minutes:分鐘。整形。

seconds:秒。整形。

start_date:間隔觸發的起始時間。

end_date:間隔觸發的結束時間。

jitter:觸發的時間誤差。

3. crontab觸發器:

在某個確切的時間周期性的觸發事件。可以使用的參數如下:year:4位數字的年份。

month:1-12月份。

day:1-31日。

week:1-53周。

day_of_week:一個禮拜中的第幾天( 0-6或者 mon、 tue、 wed、 thu、 fri、 sat、 sun)。

hour: 0-23小時。

minute: 0-59分鐘。

second: 0-59秒。

start_date: datetime類型或者字符串類型,起始時間。

end_date: datetime類型或者字符串類型,結束時間。

timezone:時區。

jitter:任務觸發的誤差時間。

也可以用表達式類型,可以用以下方式:

示例如下:

五、調度器:BlockingScheduler:適用于調度程序是進程中唯一運行的進程,調用 start函數會阻塞當前線程,不能立即返回。

BackgroundScheduler:適用于調度程序在應用程序的后臺運行,調用 start后主線程不會阻塞。

AsyncIOScheduler:適用于使用了 asyncio模塊的應用程序。

GeventScheduler:適用于使用 gevent模塊的應用程序。

TwistedScheduler:適用于構建 Twisted的應用程序。

QtScheduler:適用于構建 Qt的應用程序。

六、任務存儲器:

任務存儲器的選擇有兩種。一是內存,也是默認的配置。二是數據庫。使用內存的方式是簡單高效,但是不好的是,一旦程序出現問題,重新運行的話,會把之前已經執行了的任務重新執行一遍。數據庫則可以在程序崩潰后,重新運行可以從之前中斷的地方恢復正常運行。有以下幾種選擇:MemoryJobStore:沒有序列化,任務存儲在內存中,增刪改查都是在內存中完成。

SQLAlchemyJobStore:使用 SQLAlchemy這個 ORM框架作為存儲方式。

MongoDBJobStore:使用 mongodb作為存儲器。

RedisJobStore:使用 redis作為存儲器。

七、執行器:

執行器的選擇取決于應用場景。通常默認的 ThreadPoolExecutor已經在大部分情況下是可以滿足我們需求的。如果我們的任務涉及到一些 CPU密集計算的操作。那么應該考慮 ProcessPoolExecutor。然后針對每種程序, apscheduler也設置了不同的 executor:ThreadPoolExecutor:線程池執行器。

ProcessPoolExecutor:進程池執行器。

GeventExecutor: Gevent程序執行器。

TornadoExecutor: Tornado程序執行器。

TwistedExecutor: Twisted程序執行器。

AsyncIOExecutor: asyncio程序執行器。

八、定時任務調度配置:

這里我們用一個例子來說明。比如我想這樣配置執行器:配置 default執行器為 ThreadPoolExecutor,并且設置最多的線程數是20個。

<

存儲器:配置 default的任務存儲器為 SQLAlchemyJobStore(使用SQLite)。

<

任務配置:

設置 coalesce為 False:設置這個目的是,比如由于某個原因導致某個任務積攢了很多次沒有執行(比如有一個任務是1分鐘跑一次,但是系統原因斷了5分鐘),如果 coalesce=True,那么下次恢復運行的時候,會只執行一次,而如果設置 coalesce=False,那么就不會合并,會5次全部執行。

max_instances=5:同一個任務同一時間最多只能有5個實例在運行。比如一個耗時10分鐘的job,被指定每分鐘運行1次,如果我 max_instance值5,那么在第6~10分鐘上,新的運行實例不會被執行,因為已經有5個實例在跑了。

那么代碼如下:

九、任務操作:

1. 添加任務:

使用 scheduler.add_job(job_obj,args,id,trigger,**trigger_kwargs)。

2. 刪除任務:

使用 scheduler.remove_job(job_id,jobstore=None)。

3. 暫停任務:

使用 scheduler.pause_job(job_id,jobstore=None)。

4. 恢復任務:

使用 scheduler.resume_job(job_id,jobstore=None)。

5. 修改某個任務屬性信息:

使用 scheduler.modify_job(job_id,jobstore=None,**changes)。

6. 修改單個作業的觸發器并更新下次運行時間:

使用 scheduler.reschedule_job(job_id,jobstore=None,trigger=None,**trigger_args)

7. 輸出作業信息:

使用 scheduler.print_jobs(jobstore=None,out=sys.stdout)

十、異常監聽:

當我們的任務拋出異常后,我們可以監聽到,然后把錯誤信息進行記錄。示例代碼如下:from apscheduler.schedulers.blocking import BlockingScheduler

from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR

import datetime

import logging

# 配置日志顯示

以上便是 APScheduler庫的詳細用法了。如果我們需要在項目中開一個定時功能,完全可以選擇 APScheduler,輕量又功能強大。

這次女神再也不用2點跑到公司去加班啦~

詳細了解請加vx:zhiliaoketang008

總結

以上是生活随笔為你收集整理的python定时任务启动与停止_python定时任务最强框架APScheduler详细教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。