Biến ngữ cảnh (Context Variable) có thể có giá trị khác nhau tùy thuộc vào ngữ cảnh của nó. Khác với Thread-Local Storage (TLS) nơi mỗi luồng thực thi có thể có giá trị khác cho một biến, biến ngữ cảnh có thể có nhiều ngữ cảnh trong một luồng thực thi. Điều này hữu ích để theo dõi biến trong các tác vụ bất đồng bộ (asynchronous) đồng thời.
Class ContextVar dùng để khai báo và làm việc với biến ngữ cảnh.
import contextvars
name = contextvars.ContextVar("name", default='Hello')
Tham số default tùy chọn được trả về bởi ContextVar.get() khi không tìm thấy giá trị cho biến trong ngữ cảnh hiện tại.
name: Tên của biến. Đây là thuộc tính chỉ đọc (read-only).
Các phương thức được định nghĩa trong class ContextVar:
| get() | Trả về giá trị của biến ngữ cảnh cho ngữ cảnh hiện tại. Nếu không có giá trị trong ngữ cảnh hiện tại, phương thức sẽ:
|
| set() | Gọi để đặt giá trị mới cho biến ngữ cảnh trong ngữ cảnh hiện tại. |
| reset() | Đặt lại biến ngữ cảnh về giá trị trước khi ContextVar.set() tạo token được sử dụng. |
Class Context trong module contextvars là ánh xạ (mapping) của ContextVars đến giá trị của chúng.
Context(): Tạo ngữ cảnh rỗng không có giá trị.
Để lấy bản sao của ngữ cảnh hiện tại, dùng hàm copy_context().
Phương thức run(callable, *args, **kwargs) thực thi callable(*args, **kwargs) trong đối tượng ngữ cảnh mà phương thức run được gọi trên và trả về kết quả thực thi. Mọi thay đổi đối với biến ngữ cảnh mà callable thực hiện sẽ được chứa trong đối tượng ngữ cảnh. Phương thức ném RuntimeError khi gọi trên cùng đối tượng ngữ cảnh từ nhiều hơn một luồng OS, hoặc khi gọi đệ quy.
| copy() | Trả về bản sao nông (shallow copy) của đối tượng ngữ cảnh. |
| context[var] | Trả về giá trị của biến ContextVar var. Nếu biến không được đặt trong đối tượng ngữ cảnh, ném KeyError. |
| get() | Trả về giá trị cho context var nếu có trong đối tượng ngữ cảnh. Ngược lại, trả về default. Nếu default không cho, trả về None. |
| iter() | Trả về iterator qua các biến lưu trong đối tượng ngữ cảnh. |
| len() | Trả về số biến được đặt trong đối tượng ngữ cảnh. |
| keys() | Trả về danh sách tất cả biến trong đối tượng ngữ cảnh. |
| values() | Trả về danh sách tất cả giá trị biến trong đối tượng ngữ cảnh. |
| items() | Trả về danh sách 2-tuples chứa tất cả biến và giá trị của chúng trong đối tượng ngữ cảnh. |