ตัวแปรบริบทสามารถมีค่าต่างกันได้ขึ้นอยู่กับบริบท ต่างจาก 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 ตัวที่มีตัวแปรทั้งหมดและค่าของตัวแปรในออบเจกต์บริบท |