最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)定時(shí)任務(wù)的多種方式詳解

 更新時(shí)間:2025年05月17日 10:21:49   作者:y2016724  
Python社區(qū)提供了多種庫來實(shí)現(xiàn)定時(shí)任務(wù),下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)定時(shí)任務(wù)的多種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

Python 中實(shí)現(xiàn)定時(shí)任務(wù)有多種方式,從簡(jiǎn)單的單線程定時(shí)器到復(fù)雜的分布式任務(wù)調(diào)度系統(tǒng)。以下是對(duì) Python 定時(shí)任務(wù)的詳細(xì)介紹,涵蓋不同場(chǎng)景下的實(shí)現(xiàn)方法、優(yōu)缺點(diǎn)和適用范圍。

一、基礎(chǔ)定時(shí)任務(wù)工具

1. time.sleep()

time.sleep() 是最簡(jiǎn)單的定時(shí)方式,通過讓程序暫停一段時(shí)間來實(shí)現(xiàn)定時(shí)效果。

示例代碼

import time

while True:
    print("執(zhí)行任務(wù)...")
    time.sleep(5)  # 每隔5秒執(zhí)行一次

優(yōu)點(diǎn)

  • 簡(jiǎn)單易用,適合輕量級(jí)任務(wù)。
  • 不需要額外依賴庫。

缺點(diǎn)

  • 阻塞主線程,無法同時(shí)執(zhí)行其他任務(wù)。
  • 不支持復(fù)雜的調(diào)度規(guī)則(如每天某時(shí)刻運(yùn)行)。

適用場(chǎng)景

  • 簡(jiǎn)單的循環(huán)任務(wù),不需要復(fù)雜的調(diào)度邏輯。

2. threading.Timer

threading.Timer 是 Python 標(biāo)準(zhǔn)庫中的一個(gè)類,用于在指定的時(shí)間后執(zhí)行某個(gè)函數(shù)。

示例代碼

import threading

def task():
    print("執(zhí)行任務(wù)...")

# 創(chuàng)建一個(gè)定時(shí)器,5秒后執(zhí)行task函數(shù)
timer = threading.Timer(5, task)
timer.start()

優(yōu)點(diǎn)

  • 非阻塞,可以在后臺(tái)運(yùn)行。
  • 適合一次性定時(shí)任務(wù)。

缺點(diǎn)

  • 不適合周期性任務(wù)。
  • 如果任務(wù)未完成,可能會(huì)導(dǎo)致資源泄漏。

適用場(chǎng)景

  • 一次性延遲任務(wù)。

二、高級(jí)定時(shí)任務(wù)工具

3. schedule 庫

schedule 是一個(gè)輕量級(jí)的第三方庫,支持靈活的任務(wù)調(diào)度規(guī)則。

安裝

pip install schedule

示例代碼

import schedule
import time

def job():
    print("執(zhí)行任務(wù)...")

# 每隔10秒執(zhí)行一次
schedule.every(10).seconds.do(job)

# 每天10:30執(zhí)行一次
schedule.every().day.at("10:30").do(job)

while True:
    schedule.run_pending()  # 檢查是否有任務(wù)需要執(zhí)行
    time.sleep(1)  # 避免CPU占用過高

優(yōu)點(diǎn)

  • 支持多種調(diào)度規(guī)則(秒、分鐘、小時(shí)、天等)。
  • 語法簡(jiǎn)單,易于上手。

缺點(diǎn)

  • 單線程運(yùn)行,不適合高并發(fā)場(chǎng)景。
  • 不支持分布式任務(wù)調(diào)度。

適用場(chǎng)景

  • 輕量級(jí)的周期性任務(wù)調(diào)度。

4. APScheduler 庫

APScheduler 是一個(gè)功能強(qiáng)大的任務(wù)調(diào)度庫,支持復(fù)雜的調(diào)度規(guī)則和持久化。

安裝

pip install apscheduler

示例代碼

from apscheduler.schedulers.blocking import BlockingScheduler

def job():
    print("執(zhí)行任務(wù)...")

# 創(chuàng)建調(diào)度器
scheduler = BlockingScheduler()

# 添加任務(wù):每隔5秒執(zhí)行一次
scheduler.add_job(job, 'interval', seconds=5)

# 添加任務(wù):每天10:30執(zhí)行一次
scheduler.add_job(job, 'cron', hour=10, minute=30)

# 啟動(dòng)調(diào)度器
scheduler.start()

特點(diǎn)

  • 調(diào)度類型
    • interval:按固定時(shí)間間隔執(zhí)行任務(wù)。
    • cron:類似 Linux 的 cron 表達(dá)式,支持復(fù)雜的時(shí)間規(guī)則。
    • date:在特定日期和時(shí)間執(zhí)行一次任務(wù)。
  • 存儲(chǔ)后端:支持內(nèi)存、數(shù)據(jù)庫等多種存儲(chǔ)方式,適合持久化任務(wù)。
  • 執(zhí)行器
    • ThreadPoolExecutor:多線程執(zhí)行任務(wù)。
    • ProcessPoolExecutor:多進(jìn)程執(zhí)行任務(wù)。

優(yōu)點(diǎn)

  • 功能強(qiáng)大,支持復(fù)雜的調(diào)度規(guī)則。
  • 支持任務(wù)持久化,重啟后可以繼續(xù)執(zhí)行未完成的任務(wù)。
  • 可擴(kuò)展性強(qiáng),適合生產(chǎn)環(huán)境。

缺點(diǎn)

  • 相對(duì)復(fù)雜,學(xué)習(xí)成本較高。
  • 對(duì)于簡(jiǎn)單的任務(wù)可能顯得過于重量級(jí)。

適用場(chǎng)景

  • 需要復(fù)雜調(diào)度規(guī)則的任務(wù)。
  • 需要持久化或高可靠性的任務(wù)。

三、分布式任務(wù)調(diào)度工具

5. Celery

Celery 是一個(gè)分布式任務(wù)隊(duì)列框架,廣泛應(yīng)用于大規(guī)模分布式系統(tǒng)中。

安裝

pip install celery

示例代碼

from celery import Celery
from datetime import timedelta

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def job():
    print("執(zhí)行任務(wù)...")

# 配置定時(shí)任務(wù)
app.conf.beat_schedule = {
    'run-every-10-seconds': {
        'task': 'tasks.job',
        'schedule': timedelta(seconds=10),
    },
}

if __name__ == '__main__':
    app.start()

特點(diǎn)

  • Broker:支持 Redis、RabbitMQ 等消息隊(duì)列作為任務(wù)中間件。
  • Worker:多個(gè) Worker 可以并行處理任務(wù)。
  • Beat:內(nèi)置定時(shí)任務(wù)調(diào)度器,支持周期性任務(wù)。

優(yōu)點(diǎn)

  • 分布式架構(gòu),適合大規(guī)模系統(tǒng)。
  • 支持異步任務(wù)和定時(shí)任務(wù)。
  • 可擴(kuò)展性強(qiáng),支持動(dòng)態(tài)添加任務(wù)。

缺點(diǎn)

  • 配置復(fù)雜,需要搭建消息隊(duì)列。
  • 學(xué)習(xí)曲線較陡。

適用場(chǎng)景

  • 高并發(fā)、分布式系統(tǒng)中的任務(wù)調(diào)度。
  • 需要異步處理的任務(wù)。

6. Airflow

Airflow 是一個(gè)開源的工作流管理平臺(tái),專為復(fù)雜任務(wù)調(diào)度設(shè)計(jì)。

安裝

pip install apache-airflow

示例代碼

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta

def job():
    print("執(zhí)行任務(wù)...")

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2023, 1, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'example_dag',
    default_args=default_args,
    schedule_interval=timedelta(seconds=10),
)

task = PythonOperator(
    task_id='example_task',
    python_callable=job,
    dag=dag,
)

if __name__ == "__main__":
    dag.cli()

特點(diǎn)

  • DAG(Directed Acyclic Graph):通過 DAG 定義任務(wù)之間的依賴關(guān)系。
  • Web UI:提供可視化的任務(wù)監(jiān)控界面。
  • 插件支持:支持多種插件,可擴(kuò)展性強(qiáng)。

優(yōu)點(diǎn)

  • 強(qiáng)大的工作流管理能力。
  • 可視化界面,便于監(jiān)控和調(diào)試。
  • 支持復(fù)雜的依賴關(guān)系。

缺點(diǎn)

  • 配置復(fù)雜,啟動(dòng)成本較高。
  • 學(xué)習(xí)曲線較陡。

適用場(chǎng)景

  • 復(fù)雜的 ETL 流程。
  • 數(shù)據(jù)管道和批量任務(wù)調(diào)度。

四、系統(tǒng)級(jí)定時(shí)任務(wù)

7. Cron(Linux 系統(tǒng)定時(shí)任務(wù))

Cron 是 Linux 系統(tǒng)自帶的定時(shí)任務(wù)工具,可以通過命令行配置。

示例

編輯 crontab 文件:

crontab -e

添加以下內(nèi)容:

*/5 * * * * /usr/bin/python3 /path/to/script.py

解釋

  • */5:每5分鐘執(zhí)行一次。
  • /usr/bin/python3:指定 Python 解釋器路徑。
  • /path/to/script.py:腳本路徑。

優(yōu)點(diǎn)

  • 系統(tǒng)級(jí)定時(shí)任務(wù),穩(wěn)定可靠。
  • 不依賴 Python 庫。

缺點(diǎn)

  • 配置不夠直觀,容易出錯(cuò)。
  • 不支持復(fù)雜的任務(wù)調(diào)度。

適用場(chǎng)景

  • 系統(tǒng)級(jí)別的簡(jiǎn)單定時(shí)任務(wù)。

五、總結(jié)與對(duì)比

工具特點(diǎn)優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景
time.sleep最簡(jiǎn)單的定時(shí)方式無需依賴,簡(jiǎn)單易用阻塞主線程,功能有限簡(jiǎn)單的循環(huán)任務(wù)
threading.Timer基于線程的定時(shí)器非阻塞,適合一次性任務(wù)不支持周期性任務(wù)一次性延遲任務(wù)
schedule輕量級(jí)第三方庫易于使用,支持多種調(diào)度規(guī)則單線程運(yùn)行,不支持分布式輕量級(jí)周期性任務(wù)
APScheduler功能強(qiáng)大的任務(wù)調(diào)度庫支持復(fù)雜調(diào)度規(guī)則和持久化學(xué)習(xí)成本較高需要復(fù)雜調(diào)度規(guī)則的任務(wù)
Celery分布式任務(wù)隊(duì)列框架支持異步任務(wù)和分布式調(diào)度配置復(fù)雜高并發(fā)、分布式系統(tǒng)的任務(wù)調(diào)度
Airflow開源工作流管理平臺(tái)強(qiáng)大的工作流管理能力,可視化界面啟動(dòng)成本高,學(xué)習(xí)曲線陡峭復(fù)雜的 ETL 流程
Cron系統(tǒng)級(jí)定時(shí)任務(wù)工具穩(wěn)定可靠,不依賴 Python 庫配置不夠直觀系統(tǒng)級(jí)別的簡(jiǎn)單定時(shí)任務(wù)

六、選擇建議

  • 簡(jiǎn)單任務(wù):如果只是簡(jiǎn)單的周期性任務(wù),推薦使用 schedule 或 APScheduler。
  • 分布式任務(wù):如果需要分布式調(diào)度,推薦使用 Celery。
  • 復(fù)雜工作流:如果涉及復(fù)雜的任務(wù)依賴關(guān)系,推薦使用 Airflow。
  • 系統(tǒng)級(jí)別:如果是在 Linux 系統(tǒng)上運(yùn)行,推薦直接使用 Cron。

到此這篇關(guān)于python實(shí)現(xiàn)定時(shí)任務(wù)的多種方式的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pyqt5中QThread在使用時(shí)出現(xiàn)重復(fù)emit的實(shí)例

    pyqt5中QThread在使用時(shí)出現(xiàn)重復(fù)emit的實(shí)例

    今天小編就為大家分享一篇pyqt5中QThread在使用時(shí)出現(xiàn)重復(fù)emit的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python做接口測(cè)試的必要性

    python做接口測(cè)試的必要性

    在本篇文章里小編給大家整理的是關(guān)于python做接口測(cè)試的必要性以及相關(guān)知識(shí)點(diǎn),有興趣的朋友們學(xué)習(xí)下。
    2019-11-11
  • 基于python實(shí)現(xiàn)新春煙花盛宴效果

    基于python實(shí)現(xiàn)新春煙花盛宴效果

    這篇文章給大家用Python綻放了一場(chǎng)新春煙花盛宴,這里提前祝大家新春快樂呀,文中通過代碼示例給大家介紹的非常詳細(xì),感興趣的小伙伴可以自己動(dòng)手嘗試一下
    2024-02-02
  • Ubuntu中配置TensorFlow使用環(huán)境的方法

    Ubuntu中配置TensorFlow使用環(huán)境的方法

    這篇文章主要介紹了Ubuntu中配置TensorFlow使用環(huán)境的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python GUI庫圖形界面開發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析

    python GUI庫圖形界面開發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析,需要的朋友可以參考下
    2020-03-03
  • 圖文詳解在Anaconda安裝Pytorch的詳細(xì)步驟

    圖文詳解在Anaconda安裝Pytorch的詳細(xì)步驟

    Anaconda指的是一個(gè)開源的Python發(fā)行版本,其包含了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),下面這篇文章主要給大家介紹了關(guān)于在Anaconda安裝Pytorch的詳細(xì)步驟,需要的朋友可以參考下
    2022-07-07
  • ubuntu系統(tǒng)下切換python版本的方法

    ubuntu系統(tǒng)下切換python版本的方法

    有時(shí)候需要在默認(rèn)python中使用不通版本的python,下面這篇文章主要介紹了ubuntu系統(tǒng)下切換python版本的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法

    Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法

    今天小編就為大家分享一篇Python實(shí)現(xiàn)深度遍歷和廣度遍歷的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解Python?itertools模塊中starmap函數(shù)的應(yīng)用

    詳解Python?itertools模塊中starmap函數(shù)的應(yīng)用

    starmap是一個(gè)非常有用的函數(shù),它屬于itertools模塊中的一部分,本文將詳細(xì)介紹starmap函數(shù)的作用、用法以及實(shí)際應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助
    2024-03-03
  • python中的list字符串元素排序

    python中的list字符串元素排序

    這篇文章主要介紹了python中的list字符串元素排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論

大丰市| 孝昌县| 乌什县| 永州市| 临西县| 广东省| 山阴县| 太和县| 乌海市| 安宁市| 张家港市| 甘孜县| 临西县| 泊头市| 太仓市| 浮梁县| 湘阴县| 东辽县| 翼城县| 辽中县| 南京市| 凭祥市| 夏津县| 沂水县| 镇沅| 阳山县| 灌云县| 蓬溪县| 集安市| 昂仁县| 电白县| 阳东县| 新泰市| 江达县| 科尔| 乌恰县| 内丘县| 大石桥市| 嘉黎县| 广德县| 元氏县|