CodeGym /Khóa học Java /Python SELF VI /Sử dụng thư viện schedule để chạy các task theo lịch

Sử dụng thư viện schedule để chạy các task theo lịch

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Giới thiệu về thư viện schedule

Trong bài giảng này, chúng ta sẽ như những cơ chế đồng hồ thực thụ, học cách chạy các task theo lịch, để code của chúng ta hoạt động đúng vào lúc chúng ta muốn. Sẵn sàng chưa? Hôm nay chúng ta sẽ thuần hóa thời gian!

Thư viện schedule là một module nhẹ để chạy các hàm theo lịch đã định trước. Nếu code của bạn cần thực thi theo một lịch trình cụ thể, ví dụ như thu thập dữ liệu mỗi ngày lúc 6 giờ sáng hoặc gửi các nhắc nhở hàng ngày, thì schedule chính là điều bạn cần.

Đây là những ưu điểm chính của schedule:

  • Đơn giản: Giao diện trực quan hơn rất nhiều so với các giải pháp mặc định như cron hay threading.
  • Tối giản: Không có các chức năng dư thừa - chỉ có những gì cần thiết.
  • Dễ hiểu: Sử dụng gần như ngôn ngữ tự nhiên để định nghĩa lịch trình.

Cài đặt thư viện

Để bắt đầu, trước tiên chúng ta cần cài đặt thư viện schedule. Giống như nhiều thư viện Python khác, bạn có thể sử dụng pip:

Bash
pip install schedule

Bây giờ, khi mọi thứ đã sẵn sàng, hãy bắt đầu khám phá thế giới tự động hóa và xem cách schedule có thể thay đổi công việc hàng ngày của bạn.

Các phương thức chính của thư viện schedule

Thư viện schedule cung cấp các phương thức để thiết lập task theo thời gian và tần suất khác nhau:

  • every().day.at("HH:MM") — chạy task mỗi ngày vào một thời gian cụ thể.
  • every().hour — chạy task mỗi giờ.
  • every().minute — chạy task mỗi phút.
  • every().week.at("HH:MM") — chạy task hàng tuần vào thời gian cụ thể.
  • every().monday.at("HH:MM") — chạy task mỗi thứ Hai vào thời gian cụ thể.
  • every(10).seconds — chạy task mỗi 10 giây (hoặc bất kỳ khoảng thời gian nào khác).

2. Cài đặt task lặp lại

Bắt đầu với một thứ đơn giản - lên lịch cho một hàm được thực thi mỗi giờ. Chúng ta sẽ tạo một hàm đơn giản, hiển thị một thông báo chào hỏi, và chạy nó theo lịch.

Ví dụ: Chào hỏi mỗi giờ

Python

import schedule
import time

def say_hello():
    print("Xin chào! Chúng tôi đang làm việc với tự động hóa giờ.")

# Chạy hàm say_hello mỗi giờ
schedule.every().hour.do(say_hello)

while True:
    # Thực hiện tất cả các task đã đến thời gian
    schedule.run_pending()
    time.sleep(1)

Vậy là xong — script đầu tiên của bạn với schedule! Trong ví dụ này, chúng ta đã sử dụng phương thức every().hour.do(say_hello) để nói "Xin chào!" mỗi giờ. Thật thú vị, phải không?

Lệnh schedule.every().hour.do(say_hello) không thực thi hàm say_hello, mà thêm nó vào lịch trình. Thực thi thực tế của hàm sẽ xảy ra vào lúc nó được định giờ - bằng cách sử dụng mã schedule.run_pending().

3. Cài đặt các khoảng thời gian phức tạp hơn

Giả sử chúng ta muốn chạy task không chỉ mỗi giờ, mà còn, ví dụ, mỗi 10 phút hoặc vào những ngày cụ thể trong tuần? schedule hỗ trợ hầu hết các biểu thức thời gian phổ biến, và bạn có thể sử dụng chúng một cách dễ dàng không kém.

Ví dụ: Chạy task mỗi 10 phút

Python

import schedule
import time

def task():
    print("Task này được thực thi mỗi 10 phút.")

# Lên lịch chạy task mỗi 10 phút
schedule.every(10).minutes.do(task)

while True:
    schedule.run_pending() # Thực thi tất cả các task đã đến thời gian
    time.sleep(1)

Ví dụ: Chạy task vào các ngày cụ thể

Giờ hãy thử lên lịch cho một task chạy vào những ngày cụ thể trong tuần, ví dụ, mỗi thứ Hai và thứ Tư, nhưng chỉ vào lúc 9 giờ sáng.

Python

import schedule
import time

def monday_wednesday_task():
    print("Task này được thực thi vào thứ Hai và thứ Tư lúc 9 giờ sáng.")

# Chạy task vào thứ Hai và thứ Tư lúc 9 giờ sáng
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)

while True:
    schedule.run_pending()
    time.sleep(1)

Như bạn thấy, schedule xử lý các biểu thức thời gian khác nhau, bao gồm ngày trong tuần và thời gian chính xác. Điều này cực kỳ thuận tiện để lên lịch các task đồng bộ hóa với công việc hoặc các sự kiện theo lịch trình của bạn.

4. Xử lý các task với các điều kiện thời gian khác nhau

Nếu script của bạn thực hiện nhiều task, và mỗi task có lịch trình riêng của nó, schedule vẫn dễ dàng xử lý được. Ví dụ, một task có thể chạy mỗi sáng, trong khi task khác chạy mỗi thứ Sáu.

Ví dụ: Kết hợp các task khác nhau trong một script

Python

import schedule
import time

def morning_task():
    print("Chào buổi sáng! Đã đến giờ cho task buổi sáng.")

def friday_task():
    print("Yeah, thứ Sáu rồi! Đến giờ làm việc với task thứ Sáu.")

# Task buổi sáng mỗi sáng lúc 7:30
schedule.every().day.at("07:30").do(morning_task)

# Task thứ Sáu mỗi thứ Sáu lúc 4:00 chiều
schedule.every().friday.at("16:00").do(friday_task)

while True:
    schedule.run_pending()
    time.sleep(1)

Lời khuyên thực tế và lỗi thường gặp

Khi nói đến tự động hóa với schedule, có một vài điểm bạn nên lưu ý.

Đầu tiên, hãy nhớ rằng schedule chạy task trong luồng chính. Điều này có nghĩa là nếu task của bạn kéo dài hoặc có thể chặn việc thực thi các task khác, bạn nên xem xét sử dụng đa luồng hoặc gọi đồng bộ cho task.

Thứ hai, nếu task của bạn cần phải thực thi vào thời gian chính xác và điều này rất quan trọng, hãy đảm bảo thiết bị của bạn đang bật và script đang chạy. schedule không hoạt động nếu script bị dừng hoặc thiết bị bị tắt.

Và cuối cùng, một sự hiểu lầm phổ biến — kỳ vọng rằng schedule có thể bù đắp cho các task đã bị bỏ lỡ. Thật không may, nếu script của bạn không chạy khi task cần được thực thi, schedule sẽ không thực hiện nó sau đó.

1
Опрос
Làm việc với ngày và giờ,  39 уровень,  4 лекция
недоступен
Làm việc với ngày và giờ
Làm việc với ngày và giờ
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION