কন্টেক্সট ভেরিয়েবলের মান এর কন্টেক্সট (context) অনুযায়ী ভিন্ন হতে পারে। থ্রেড-লোকাল স্টোরেজের মতো নয় যেখানে প্রতিটি এক্সিকিউশন থ্রেডের জন্য ভেরিয়েবলের ভিন্ন মান থাকে, একটি কন্টেক্সট ভেরিয়েবলের একই এক্সিকিউশন থ্রেডের ভিতরেও একাধিক কন্টেক্সট হতে পারে। এটি কনকারেন্ট অ্যাসিঙ্ক্রোনাস টাস্কে ভেরিয়েবল ট্র্যাক রাখতে উপযোগী।
ContextVar ক্লাস কন্টেক্সট ভেরিয়েবল ডিক্লেয়ার ও কাজ করার জন্য ব্যবহৃত হয়।
import contextvars
name = contextvars.ContextVar("name", default='Hello')
ঐচ্ছিক default প্যারামিটার ContextVar.get() দিয়ে রিটার্ন হয় যখন করেন্ট কন্টেক্সটে ভেরিয়েবলের কোনো মান নেই।
name: ভেরিয়েবলের নাম। এটি রিড-অনলি প্রোপার্টি।
ContextVar ক্লাসে নিচের মেথডগুলো ডিফাইন করা আছে:
| মেথড | বিবরণ |
|---|---|
| get() | কারেন্ট কন্টেক্সটের জন্য কন্টেক্সট ভেরিয়েবলের মান রিটার্ন করে। যদি কারেন্ট কন্টেক্সটে ভেরিয়েবলের মান নেই, তবে:
|
| set() | কারেন্ট কন্টেক্সটে কন্টেক্সট ভেরিয়েবলের নতুন মান সেট করার জন্য কল করুন। |
| reset() | কন্টেক্সট ভেরিয়েবলকে সেট করার আগের মান তার ফিরিয়ে দিন (যে মান ছিল ContextVar.set()-এর 의해 টোকেন তৈরি হওয়ার আগে)। |
contextvars মডিউলের Context ক্লাস হলো ContextVar-কে তাদের মানগুলোর সাথে ম্যাপিং।
- Context(): কোনো মান ছাড়া একটি খালি কন্টেক্সট তৈরি করে।
- কারেন্ট কন্টেক্সটের কপি পেতে
copy_context()ফাংশন ব্যবহার করুন। run(callable, *args, **kwargs)মেথডcallable(*args, **kwargs)কোড কন্টেক্সট অবজেক্টে এক্সিকিউট করে এবং এক্সিকিউশনের ফলাফল রিটার্ন করে। যেকোনো কন্টেক্সট ভেরিয়েবলে callable করলে যা পরিবর্তন হবে, সেটি কন্টেক্সট অবজেক্টে থাকবে। একই কন্টেক্সট অবজেক্টে একাধিক OS থ্রেড থেকে বা রিকার্সিভ কল করলে RuntimeError রেইজ করে।
Context অবজেক্টের অন্যান্য মেথড:
| মেথড | বিবরণ |
|---|---|
| copy() | কন্টেক্সট অবজেক্টের শ্যালো কপি রিটার্ন করে। |
| context[var] | var ContextVar ভেরিয়েবলের মান রিটার্ন করে। যদি ভেরিয়েবল কন্টেক্সট অবজেক্টে সেট না থাকে, KeyError রেইজ করে। |
| get() | context var-এর মান রিটার্ন করে যদি কন্টেক্সট অবজেক্টে থাকে। নাইলে default রিটার্ন করে। default না দিলে None রিটার্ন করে। |
| iter() | কন্টেক্সট অবজেক্টে সংরক্ষিত ভেরিয়েবলগুলোর ইটেরেটর রিটার্ন করে। |
| len() | কন্টেক্সট অবজেক্টে সেট করা ভেরিয়েবল সংখ্যা রিটার্ন করে। |
| keys() | কন্টেক্সট অবজেক্টে সব ভেরিয়েবলের লিস্ট রিটার্ন করে। |
| values() | কন্টেক্সট অবজেক্টে সব ভেরিয়েবলের ভ্যালুর লিস্ট রিটার্ন করে। |
| items() | কন্টেক্সট অবজেক্টে সব ভেরিয়েবল এবং তাদের ভ্যালুর 2-টাপলের লিস্ট রিটার্ন করে। |