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.
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.
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:
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ó.
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ó.
# 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.
# 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().
# 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ụ đó.
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.
GO TO FULL VERSION