CodeGym /Các khóa học /Python SELF VI /Cài đặt các nhiệm vụ lặp lại (nhắc nhở hàng ngày và hàng ...

Cài đặt các nhiệm vụ lặp lại (nhắc nhở hàng ngày và hàng tuần)

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

1. Cài đặt một nhiệm vụ đơn giản

Bắt đầu với ví dụ đơn giản nhất: làm thế nào để mã của chúng ta nhắc nhở kiểm tra email hàng ngày.

Python

import schedule
import time

def job():
    print("Nhắc nhở: kiểm tra email của bạn đi!")

# Cài đặt nhiệm vụ chạy hàng ngày
schedule.every().day.at("09:00").do(job)

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

Trong ví dụ này, hàm job sẽ được gọi mỗi ngày lúc 9h sáng. Thư viện schedule kiểm tra các nhiệm vụ đã được lập lịch, mỗi giây một lần bằng run_pending(). Đừng quên rằng mã của bạn cần chạy liên tục để nhiệm vụ được thực thi.

Lưu ý dành cho các hacker đỉnh

Lưu ý rằng bạn có thể sử dụng every().hour để chạy nhiệm vụ mỗi giờ, hoặc every(2).hours để chạy nó mỗi hai giờ. Các khả năng gần như không giới hạn.

2. Nhắc nhở vào các ngày làm việc

Bây giờ hãy làm phức tạp hơn: giả sử bạn chỉ cần nhắc nhở vào ngày làm việc. Ví dụ: mỗi ngày trong tuần, chúng ta muốn nhận cùng một lời nhắc.

Python

import schedule
import time

def weekday_job():
    print("Nhắc nhở công việc: đừng quên chuẩn bị báo cáo!")

schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)

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

Trong trường hợp này, vào lúc 8h sáng mỗi ngày làm việc, bạn sẽ nhận được lời nhắc chuẩn bị báo cáo. Như vậy, kịch bản của bạn sẽ luôn theo dõi lịch trình, ngay cả khi bạn quên mất điều đó.

3. Cài đặt các nhiệm vụ hàng tuần

Nếu bạn muốn nhận nhắc nhở mỗi Chủ Nhật thì sao? Giả sử bạn muốn kiểm tra nguồn cung cấp cà phê trước tuần làm việc. Hãy xem cách làm:

Python

import schedule
import time

def sunday_job():
    print("Nhắc nhở: kiểm tra nguồn cung cấp cà phê cho tuần tới!")

schedule.every().sunday.at("18:00").do(sunday_job)

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

Đoạn mã nhỏ này sẽ mang lại một chút trật tự cho Chủ Nhật của bạn, nhắc nhở bạn chuẩn bị sẵn sàng cho tuần tới. Bây giờ cà phê của bạn sẽ không bao giờ hết vào lúc bất ngờ nhất. Vâng, tôi biết với nhiều người, điều đó có thể là một thảm họa.

4. Thay đổi nhiệm vụ

Xóa nhiệm vụ khỏi lịch trình

Nếu cần hủy bỏ việc thực hiện một nhiệm vụ, bạn có thể sử dụng phương pháp cancel_job(). Ví dụ: để xóa một nhiệm vụ khỏi lịch trình, bạn có thể lấy đối tượng nhiệm vụ và gọi cancel_job() trên nó.

Python

job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job)  # Xóa nhiệm vụ khỏi lịch trình

Thay đổi thời gian thực hiện nhiệm vụ

Để thay đổi thời gian thực hiện nhiệm vụ, bạn có thể gán lại lịch trình. Ví dụ: nếu nhiệm vụ được lên lịch vào 9:00, nhưng bây giờ cần chuyển nó sang 10:00, chúng ta có thể ghi đè lại lịch trình của nó.

Python

# Lên lịch nhiệm vụ hàng ngày vào 9:00
job = schedule.every().day.at("09:00").do(my_task)

# Chuyển nhiệm vụ sang 10:00
job.clear()  # Xóa lịch trình hiện tại của nhiệm vụ
job.at("10:00")  # Chuyển sang thời gian mới

Kiểm tra các nhiệm vụ đang hoạt động

Để xem các nhiệm vụ đã được lên lịch, bạn có thể in ra danh sách tất cả các nhiệm vụ đang hoạt động bằng schedule.jobs. Điều này hữu ích khi cần thông tin về tất cả các nhiệm vụ trong lịch trình.

Python

# Thêm một số nhiệm vụ
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)

# Kiểm tra các nhiệm vụ đang hoạt động
for job in schedule.jobs:
    print("Nhiệm vụ:", job)

Xóa tất cả các nhiệm vụ khỏi lịch trình

Nếu cần xóa sạch lịch trình và loại bỏ tất cả các nhiệm vụ đã được lên lịch, bạn có thể sử dụng phương pháp clear().

Python

# Lên lịch vài nhiệm vụ
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)

# Xóa lịch trình
schedule.clear()

Thực hiện nhiệm vụ chỉ một lần

Đôi khi bạn cần thực hiện một nhiệm vụ chỉ một lần vào thời điểm định sẵn. Sau khi thực hiện xong, bạn có thể sử dụng phương pháp schedule.cancel_job(job) để hủy nhiệm vụ đó.

Python

def one_time_task():
    print("Nhiệm vụ chỉ chạy một lần")
    return schedule.CancelJob  # Hủy nhiệm vụ sau khi thực hiện

# Lên lịch thực hiện nhiệm vụ một lần
schedule.every().day.at("09:00").do(one_time_task)

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

5. Các kịch bản thực tế

Và giờ hãy nghiêm túc hơn: cách tự động hóa như thế này được áp dụng trong môi trường chuyên nghiệp như thế nào? Trong thực tế, bạn có thể sử dụng lập lịch nhiệm vụ để:

  • Tự động thu thập dữ liệu hàng ngày hoặc hàng tuần.
  • Tạo và gửi báo cáo vào một ngày và giờ cụ thể.
  • Giám sát trạng thái của máy chủ hoặc giao diện web với thông báo về lỗi.
  • Chạy sao lưu cơ sở dữ liệu định kỳ.

Các lỗi phổ biến

Khi lập lịch nhiệm vụ, hãy cẩn thận với sự không đồng bộ về thời gian, chẳng hạn như khi máy chủ của bạn và máy tính cục bộ ở các múi giờ khác nhau. Ngoài ra, nếu mã của bạn vô tình bị dừng, nhiệm vụ đã được lên lịch sẽ không được thực hiện. Hãy sử dụng các công cụ theo dõi, như cron (cho các hệ thống giống Unix) hoặc Windows Task Scheduler.

Nếu bạn vô tình quên thêm time.sleep(1) vào cuối vòng lặp, bạn sẽ tạo ra một tiến trình sử dụng CPU liên tục mà không dừng, giống như một đoạn mã tăng động. Nói chung, hãy nhớ giữ mã của bạn ở trạng thái hoạt động ổn định.

1
Nhiệm vụ
Python SELF VI, mức độ, bài học
Đã khóa
Nhắc nhở hàng ngày
Nhắc nhở hàng ngày
2
Nhiệm vụ
Python SELF VI, mức độ, bài học
Đã khóa
Nhắc nhở vào các ngày trong tuần
Nhắc nhở vào các ngày trong tuần
3
Nhiệm vụ
Python SELF VI, mức độ, bài học
Đã khóa
Nhắc nhở hàng tuần
Nhắc nhở hàng tuần
4
Nhiệm vụ
Python SELF VI, mức độ, bài học
Đã khóa
Thu thập dữ liệu tự động và báo cáo
Thu thập dữ liệu tự động và báo cáo
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION