欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2025年05月17日 10:21:49   作者:y2016724  
Python社區(qū)提供了多種庫(kù)來(lái)實(shí)現(xiàn)定時(shí)任務(wù),下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)定時(shí)任務(wù)的多種方式,文中通過(guò)示例代碼介紹的非常詳細(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í)方式,通過(guò)讓程序暫停一段時(shí)間來(lái)實(shí)現(xiàn)定時(shí)效果。

示例代碼

import time

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

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

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

缺點(diǎn)

  • 阻塞主線程,無(wú)法同時(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)庫(kù)中的一個(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 庫(kù)

schedule 是一個(gè)輕量級(jí)的第三方庫(kù),支持靈活的任務(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占用過(guò)高

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

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

缺點(diǎn)

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

適用場(chǎng)景

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

4. APScheduler 庫(kù)

APScheduler 是一個(gè)功能強(qiáng)大的任務(wù)調(diào)度庫(kù),支持復(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ù)庫(kù)等多種存儲(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ù)可能顯得過(guò)于重量級(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è)開(kāi)源的工作流管理平臺(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):通過(guò) 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ù)工具,可以通過(guò)命令行配置。

示例

編輯 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 庫(kù)。

缺點(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í)方式無(wú)需依賴,簡(jiǎn)單易用阻塞主線程,功能有限簡(jiǎn)單的循環(huán)任務(wù)
threading.Timer基于線程的定時(shí)器非阻塞,適合一次性任務(wù)不支持周期性任務(wù)一次性延遲任務(wù)
schedule輕量級(jí)第三方庫(kù)易于使用,支持多種調(diào)度規(guī)則單線程運(yùn)行,不支持分布式輕量級(jí)周期性任務(wù)
APScheduler功能強(qiáng)大的任務(wù)調(diào)度庫(kù)支持復(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開(kāi)源工作流管理平臺(tái)強(qiáng)大的工作流管理能力,可視化界面啟動(dòng)成本高,學(xué)習(xí)曲線陡峭復(fù)雜的 ETL 流程
Cron系統(tǒng)級(jí)定時(shí)任務(wù)工具穩(wěn)定可靠,不依賴 Python 庫(kù)配置不夠直觀系統(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)文章

  • Python中性能分析利器pyinstrument詳細(xì)講解

    Python中性能分析利器pyinstrument詳細(xì)講解

    大家好,本篇文章主要講的是Python中性能分析利器pyinstrument詳細(xì)講解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python使用urllib模塊開(kāi)發(fā)的多線程豆瓣小站mp3下載器

    python使用urllib模塊開(kāi)發(fā)的多線程豆瓣小站mp3下載器

    對(duì)豆瓣音樂(lè)小站頁(yè)面html分析出所有mp3(正則匹配)文件url,然后用urllib.urlretrieve中方法直接將文件下載到本地,通過(guò)多線程技術(shù)下載
    2014-01-01
  • Python字符串操作實(shí)戰(zhàn)之如何提取子字符串

    Python字符串操作實(shí)戰(zhàn)之如何提取子字符串

    這篇文章主要給大家介紹了關(guān)于Python字符串操作實(shí)戰(zhàn)之如何提取子字符串的相關(guān)資料,字符串是Python中最常用的數(shù)據(jù)類型,大家應(yīng)該都不陌生,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 使用Python3實(shí)現(xiàn)判斷函數(shù)的圈復(fù)雜度

    使用Python3實(shí)現(xiàn)判斷函數(shù)的圈復(fù)雜度

    編寫(xiě)函數(shù)最重要的原則就是:別寫(xiě)太復(fù)雜的函數(shù),那什么樣的函數(shù)才能算是過(guò)于復(fù)雜?一般會(huì)通過(guò)兩個(gè)標(biāo)準(zhǔn)來(lái)判斷,長(zhǎng)度和圈復(fù)雜度,下面我們就來(lái)看看如何使用Python判斷函數(shù)的圈復(fù)雜度吧
    2024-04-04
  • Pyinstaller打包多個(gè)資源文件的超詳細(xì)教程(推薦!)

    Pyinstaller打包多個(gè)資源文件的超詳細(xì)教程(推薦!)

    Pyinstaller是著名python打包module,軟件或者小工具用python寫(xiě)好后,用pyinstaller 可以實(shí)現(xiàn)輕松打包,下面這篇文章主要給大家介紹了關(guān)于Pyinstaller打包多個(gè)資源文件的超詳細(xì)教程,需要的朋友可以參考下
    2022-12-12
  • python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣)

    python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣)

    今天小編就為大家分享一篇python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園

    Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園

    這篇文章主要介紹了Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python函數(shù)實(shí)例萬(wàn)花筒實(shí)現(xiàn)過(guò)程

    python函數(shù)實(shí)例萬(wàn)花筒實(shí)現(xiàn)過(guò)程

    這篇文章主要為大家介紹了python函數(shù)實(shí)例萬(wàn)花筒實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 使用Python更換外網(wǎng)IP的方法

    使用Python更換外網(wǎng)IP的方法

    這篇文章主要介紹了使用Python更換外網(wǎng)IP的方法,,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • opencv實(shí)現(xiàn)圖像縮放效果

    opencv實(shí)現(xiàn)圖像縮放效果

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)圖像縮放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評(píng)論