ตัวแปรบริบทสามารถมีค่าต่างกันได้ขึ้นอยู่กับบริบท ต่างจาก Thread-Local Storage ซึ่งแต่ละเธรดการดำเนินการอาจมีค่าที่แตกต่างกันสำหรับตัวแปร ตัวแปรบริบทอาจมีหลายบริบทในเธรดการดำเนินการเดียว ซึ่งมีประโยชน์ในการติดตามตัวแปรในงานอะซิงโครนัสที่เกิดขึ้นพร้อมกัน
คลาส ContextVar ใช้เพื่อประกาศและทำงานกับ Context Variables
import contextvars
name = contextvars.ContextVar("name", default = 'Hello') ContextVar.get() พารามิเตอร์เริ่มต้นที่เป็นทางเลือกจะส่งคืนเมื่อไม่พบค่าสำหรับตัวแปรในบริบทปัจจุบัน
ชื่อ: ชื่อของตัวแปร นี่เป็นคุณสมบัติแบบอ่านอย่างเดียว
เมธอดต่อไปนี้ถูกกำหนดในคลาส ContextVar
| get() | คืนค่าสำหรับตัวแปรบริบทสำหรับบริบทปัจจุบัน หากไม่มีค่าสำหรับตัวแปรในบริบทปัจจุบัน เมธอดจะ −
|
| set() | เรียกตั้งค่าใหม่สำหรับตัวแปรบริบทในบริบทปัจจุบัน |
| รีเซ็ต() | รีเซ็ตตัวแปรบริบทเป็นค่าที่มีอยู่ก่อน ContextVar.set() ที่สร้างโทเค็นจะถูกนำมาใช้ |
คลาสบริบทในโมดูล Context Vars คือการจับคู่ Context Vars กับค่าของมัน
บริบท(): สร้างบริบทที่ว่างเปล่าโดยไม่มีค่าใดๆ
ในการรับสำเนาของบริบทปัจจุบัน ให้ใช้ฟังก์ชัน copy_context()
เมธอด run(callable, *args, **kwargs) รันโค้ด callable(*args, **kwargs) ในอ็อบเจกต์บริบทที่เรียกใช้เมธอด run และส่งกลับผลลัพธ์ของการดำเนินการ การเปลี่ยนแปลงใดๆ กับตัวแปรบริบทใดๆ ที่เรียกใช้ได้จะอยู่ในอ็อบเจ็กต์บริบท เมธอดนี้ทำให้เกิด RuntimeError เมื่อเรียกใช้บนอ็อบเจ็กต์บริบทเดียวกันจากเธรด OS มากกว่าหนึ่งเธรด หรือเมื่อเรียกซ้ำ
| copy() | ส่งคืนสำเนาตื้นของวัตถุบริบท |
| context[var] | คืนค่าของตัวแปร var ContextVar หากไม่ได้ตั้งค่าตัวแปรในวัตถุบริบท จะเกิดข้อผิดพลาดของคีย์ |
| get() | คืนค่าสำหรับ Context var หากมีค่าใน Context Object มิฉะนั้นจะกลับสู่ค่าเริ่มต้น หากไม่ได้กำหนดค่าเริ่มต้นไว้ ให้คืนค่า None |
| iter() | ส่งคืนตัววนซ้ำเหนือตัวแปรที่จัดเก็บไว้ในวัตถุบริบท |
| len() | ส่งคืนจำนวนตัวแปรที่ตั้งไว้ในอ็อบเจ็กต์บริบท |
| keys() | ส่งคืนรายการตัวแปรทั้งหมดในอ็อบเจกต์บริบท |
| values() | ส่งคืนรายการของค่าตัวแปรทั้งหมดในอ็อบเจกต์บริบท |
| items() | ส่งคืนรายการของทูเพิล 2 ตัวที่มีตัวแปรทั้งหมดและค่าของตัวแปรในออบเจกต์บริบท |