sched --- Lập lịch sự kiện¶
Source code: Lib/sched.py
Mô-đun sched xác định một lớp thực hiện bộ lập lịch sự kiện cho mục đích chung:
- class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)¶
Lớp
schedulerđịnh nghĩa một giao diện chung để lên lịch các sự kiện. Nó cần hai hàm để thực sự xử lý "thế giới bên ngoài" --- timefunc có thể gọi được mà không cần đối số và trả về một số ("thời gian", theo bất kỳ đơn vị nào). Hàm delayfunc phải có thể gọi được với một đối số, tương thích với đầu ra của timefunc và sẽ trì hoãn nhiều đơn vị thời gian đó. delayfunc cũng sẽ được gọi với đối số0sau khi mỗi sự kiện được chạy để cho phép các luồng khác có cơ hội chạy trong các ứng dụng đa luồng.Thay đổi trong phiên bản 3.3: Các tham số timefunc và delayfunc là tùy chọn.
Thay đổi trong phiên bản 3.3: Lớp
schedulercó thể được sử dụng an toàn trong môi trường đa luồng.
Ví dụ:
>>> nhập lịch, thời gian
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
... print("Từ print_time", time.time(), a)
...
>>> def print_some_times():
... print(time.time())
... s.enter(10, 1, print_time)
... s.enter(5, 2, print_time,argument=('positional',))
... # despite có mức độ ưu tiên cao hơn, 'từ khóa' chạy sau 'vị trí' vì enter() là tương đối
... s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
... s.enterabs(1_650_000_000, 10, print_time,argument=("enterabs đầu tiên",))
... s.enterabs(1_650_000_000, 5, print_time,argument=("enterabs thứ hai",))
... s.run()
... print(time.time())
...
>>> print_some_times()
1652342830.3640375
Từ print_time 1652342830.3642538 giây enterabs
Từ print_time 1652342830.3643398 lượt truy cập đầu tiên
Từ print_time 1652342835.3694863 vị trí
Từ từ khóa print_time 1652342835.3696074
Từ print_time 1652342840.369612 mặc định
1652342840.3697174
Đối tượng lập lịch¶
Các phiên bản scheduler có các phương thức và thuộc tính sau:
- scheduler.enterabs(time, priority, action, argument=(), kwargs={})¶
Lên lịch một sự kiện mới. Đối số time phải là kiểu số tương thích với giá trị trả về của hàm timefunc được truyền cho hàm tạo. Các sự kiện được lên lịch cho cùng một time sẽ được thực hiện theo thứ tự priority của chúng. Số thấp hơn thể hiện mức độ ưu tiên cao hơn.
Thực hiện sự kiện có nghĩa là thực thi
action(*argument, **kwargs). argument là một chuỗi chứa các đối số vị trí cho action. kwargs là một từ điển chứa các đối số từ khóa cho action.Giá trị trả về là một sự kiện có thể được sử dụng để hủy sự kiện sau này (xem
cancel()).Thay đổi trong phiên bản 3.3: Tham số argument là tùy chọn.
Thay đổi trong phiên bản 3.3: tham số kwargs đã được thêm vào.
- scheduler.enter(delay, priority, action, argument=(), kwargs={})¶
Lên lịch sự kiện cho delay nhiều đơn vị thời gian hơn. Ngoài thời gian tương đối, các đối số khác, hiệu ứng và giá trị trả về giống như đối với
enterabs().Thay đổi trong phiên bản 3.3: Tham số argument là tùy chọn.
Thay đổi trong phiên bản 3.3: tham số kwargs đã được thêm vào.
- scheduler.cancel(event)¶
Xóa sự kiện khỏi hàng đợi. Nếu event hiện không phải là một sự kiện trong hàng đợi, phương pháp này sẽ đưa ra
ValueError.
- scheduler.empty()¶
Trả về
Truenếu hàng đợi sự kiện trống.
- scheduler.run(blocking=True)¶
Chạy tất cả các sự kiện theo lịch trình. Phương thức này sẽ đợi (sử dụng hàm delayfunc được truyền cho hàm tạo) cho sự kiện tiếp theo, sau đó thực thi nó, v.v. cho đến khi không còn sự kiện nào được lên lịch nữa.
Nếu blocking sai thì thực thi các sự kiện đã lên lịch sắp hết hạn sớm nhất (nếu có) và sau đó trả về thời hạn của cuộc gọi đã lên lịch tiếp theo trong bộ lập lịch (nếu có).
action hoặc delayfunc có thể đưa ra ngoại lệ. Trong cả hai trường hợp, bộ lập lịch sẽ duy trì trạng thái nhất quán và truyền bá ngoại lệ. Nếu action đưa ra một ngoại lệ, thì sự kiện này sẽ không được thử trong các lệnh gọi tới
run()trong tương lai.Nếu một chuỗi sự kiện mất nhiều thời gian để chạy hơn thời gian có sẵn trước sự kiện tiếp theo, thì người lên lịch sẽ bị tụt lại phía sau. Sẽ không có sự kiện nào bị loại bỏ; mã gọi có trách nhiệm hủy các sự kiện không còn phù hợp.
Thay đổi trong phiên bản 3.3: tham số blocking đã được thêm vào.
- scheduler.queue¶
Thuộc tính chỉ đọc trả về danh sách các sự kiện sắp tới theo thứ tự chúng sẽ được chạy. Mỗi sự kiện được hiển thị dưới dạng named tuple với các trường sau: thời gian, mức độ ưu tiên, hành động, đối số, kwargs.