কম্পিউটার টিউটোরিয়াল

পাইথন ব্যবহার করে রিসোর্স ইউজেজ ইনফরমেশন


ইউনিক্স রিসোর্স ইউজেজ মাপতে হলে, আমাদের প্রোগ্রামে resource মডিউল ব্যবহার করতে হবে। এই মডিউল রিসোর্স ইউটিলাইজেশন কন্ট্রোল করতে পারেও।

এই মডিউল ব্যবহার করতে হলে, আমাদের এটি ইম্পোর্ট করতে হবে -

import resource

রিসোর্স লিমিট

এই মডিউলে আমরা setrlimit() ব্যবহার করে রিসোর্স ইউটিলাইজেশন লিমিট করতে পারি। রিসোর্স লিমিট করার জন্য দুটি প্যারামিটার রয়েছে। এগুলো হলো সফ্ট লিমিট এবং হার্ড লিমিট। সফ্ট লিমিট মূলত বর্তমান লিমিট, এটি প্রসেসের ওপর পরিবর্তন করা যায়, কিন্তু হার্ড লিমিট অতিক্রম করতে পারে না। হার্ড লিমিট সফ্ট লিমিটের উপরে যেকোনো মানে কমিয়ে দেওয়া যায়, কিন্তু বাড়ানো যায় না।

রিসোর্স লিমিটিং-এর সাথে সম্পর্কিত কিছু মেথড এবং কনস্ট্যান্ট রয়েছে। এগুলো হলো -

resource.getrlimit(resource) মেথড

এই মেথড সফ্ট এবং হার্ড লিমিট টাপল হিসেবে ফেরত দেয়। যদি নির্দিষ্ট রিসোর্স অবৈধ হয়, তবে এটি ValueError উত্থাপন করবে।

resource.setrlimit(resource, limits) মেথড

এই মেথড রিসোর্সগুলোর লিমিট সেট করতে ব্যবহৃত হয়। লিমিটগুলো সফ্ট এবং হার্ড লিমিটের টাপল হিসেবে অ্যাসাইন করা যায়। আমরা RLIM_INFINITY ব্যবহার করে আনলিমিটেড রিসোর্সও করতে পারি।

resource.prlimit(pid, resource[, limits]) মেথড

এই মেথড setrlimit() এবং getrlimit() মেথডের কম্বিনেশন। এটি একই সাথে আর্কবিট্রারি প্রসেসের জন্য রিসোর্স লিমিট গেট এবং সেট করতে পারে। যখন pid ০, তবে এটি কারেন্ট প্রসেসের ওপর কাজ করে।

রিসোর্স লিমিটস সংক্রান্ত কিছু কনস্ট্যান্ট -

Sr.No.Constants & Description
1

RLIM_INFINITY

আনলিমিটেড রিসোর্সের জন্য লিমিট

2

RLIMIT_CORE

কারেন্ট প্রসেস দ্বারা তৈরি কোর ফাইলের সর্বোচ্চ আকার।

3

RLIMIT_CPU

একটি প্রসেসরের সর্বোচ্চ প্রসেসর টাইম। যখন লিমিট অতিক্রম হয়, SIGXCCPU সিগন্যাল প্রসেসে পাঠানো হয়।

4

RLIMIT_DATA

প্রসেসরের হিপের সর্বোচ্চ আকার

5

RLIMIT_STACK

কল স্ট্যাকের সর্বোচ্চ আকার। এটি মাল্টিথ্রেডেড প্রসেসের জন্য মেইন থ্রেডের স্ট্যাক ব্যবহার করে।

6

RLIMIT_NOFILE

কারেন্ট প্রসেসের জন্য ওপেন ফাইল ডেসক্রিপ্টরের সর্বোচ্চ সংখ্যা।

7

RLIMIT_MEMLOCK

লক্ড মেমোরির জন্য সর্বোচ্চ অ্যাড্রেস স্পেস

8

RLIMIT_NICE

একটি প্রসেসের নাইস লেভেলের সিলিং

9

RLIMIT_SWAP

সওয়াপ স্পেসের সর্বোচ্চ আকার

10

RLIMIT_NTPS

সিস্টেমে pseuda টার্মিন্যালের সর্বোচ্চ সংখ্যা

রিসোর্স ইউজেজ

রিসোর্স ইউজেজ সংক্রান্ত মেথড এবং কনস্ট্যান্ট রয়েছে।

resource.getrusage(who) মেথড

এই মেথড কারেন্ট প্রসেস বা এর চাইল্ডরা দ্বারা ব্যবহৃত একটি অবজেক্ট ফেরত দেয়। এটি বিভিন্ন ফিল্ড ফেরত দেয়। রিটার্ন ভ্যালুর ফিল্ড থেকে, আমরা জানতে পারি কীভাবে রিসোর্স ব্যবহৃত হয়েছে।

resource.getpagesize() মেথড

এই মেথড একটি সিস্টেম পেজে বাইটের সংখ্যা ফেরত দেয়। এটি ফিজিক্যাল পেজ সাইজের সাথে একই নাও হতে পারে।

রিসোর্স ইউজেজ সংক্রান্ত কিছু কনস্ট্যান্ট।

Sr.No.Constants & Description
1

RUSAGE_SELF

কলিং প্রসেস দ্বারা খরচ করা রিসোর্স রিকোয়েস্ট করতে সাহায্য করে। এটি সব থ্রেডের সমস্ত রিসোর্সের যোগফল।

2

RUSAGE_CHILDREN

চাইল্ড প্রসেস দ্বারা খরচ করা রিসোর্স রিকোয়েস্ট করতে সাহায্য করে।

3

RUSAGE_BOTH

কলিং প্রসেস এবং চাইল্ড প্রসেস উভয়ের 의해 খরচ করা রিসোর্স রিকোয়েস্ট করতে সাহায্য করে। সব সিস্টেমে উপলব্ধ নয়।

4

RUSAGE_THREAD

কারেন্ট থ্রেড দ্বারা রিসোর্স ইউজেজ। সব সিস্টেমে উপলব্ধ নয়।

উদাহরণ কোড

import resource
res_limits = resource.getrusage(resource.RUSAGE_SELF)
print(res_limits)
print('Page Size: ' + str(resource.getpagesize()))
resource.setrlimit(resource.RLIMIT_CPU, (1, 2))
print('Resouce Limits: ' + str(resource.getrlimit(resource.RLIMIT_CPU)))
for a in range(1000):
    for b in range(1000):
        for c in range(1000):
            pass

আউটপুট

$ python3 example.py
resource.struct_rusage(ru_utime=0.035801, ru_stime=0.01074, ru_maxrss=9356, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=1147, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=0, ru_nivcsw=17)
Page Size: 4096
Resouce Limits: (1, 2)
CPU time limit exceeded (core dumped)

  1. পাইথনে GET মেথড ব্যবহার করে তথ্য পাস করা

  2. পাইথন ব্যবহার করে স্টপওয়াচ তৈরি করা

  3. পাইথনে WhatsApp অটোমেশন (WhatsApp using Python)

  4. পাইথনে cx_Freeze ব্যবহার করে এক্সিকিউটেবল বানানো