222. Task Scheduling with APScheduler

🔹 1. Installing APScheduler

pip install apscheduler

Fix: Install APScheduler before using it.


🔹 2. Basic APScheduler Job Example

from apscheduler.schedulers.blocking import BlockingScheduler

def job():
    print("Hello, APScheduler!")

scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', seconds=5)  # Runs every 5 seconds
scheduler.start()

Fix: BlockingScheduler() runs indefinitely until manually stopped.


🔹 3. Scheduling a Job at a Specific Time

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime, timedelta

def scheduled_task():
    print("Scheduled task executed!")

scheduler = BlockingScheduler()
run_time = datetime.now() + timedelta(seconds=10)  # Runs 10 seconds from now
scheduler.add_job(scheduled_task, 'date', run_date=run_time)
scheduler.start()

Fix: date trigger runs once at a specific time.


🔹 4. Scheduling a Recurring Job (Every Minute)

Fix: BackgroundScheduler() runs in non-blocking mode.


🔹 5. Using Cron Jobs (Run at a Specific Time Daily)

Fix: cron trigger allows precise time-based scheduling.


🔹 6. Passing Arguments to Scheduled Functions

Fix: Use args to pass arguments to scheduled functions.


🔹 7. Listing All Scheduled Jobs

Fix: scheduler.get_jobs() retrieves all active jobs.


🔹 8. Pausing and Resuming Jobs

Fix: pause_job() and resume_job() temporarily disable and enable jobs.


🔹 9. Removing a Scheduled Job

Fix: remove_job('job_id') permanently deletes a job.


🔹 10. Stopping the Scheduler Gracefully

Fix: scheduler.shutdown() stops all tasks safely.


🚀 Summary: Why Use APScheduler?

Feature
APScheduler

One-time execution

date trigger for scheduled one-time jobs

Recurring execution

interval trigger for repeated jobs

Cron-like scheduling

cron trigger for daily/hourly jobs

Background scheduling

BackgroundScheduler() for non-blocking execution

Job control

✅ Pause, resume, or remove jobs dynamically


🚀 When to Use APScheduler?

Scenario
Use APScheduler?

Running periodic background tasks

✅ Yes

Replacing cron jobs with Python

✅ Yes

Automating data collection or cleanup

✅ Yes

Triggering scheduled API calls

✅ Yes

Replacing Celery for lightweight scheduling

✅ Yes (but not for distributed tasks)


Last updated