यूनिक्स रिसोर्स यूसेज को मापने के लिए, हमें अपने प्रोग्राम्स में resource मॉड्यूल का उपयोग करने की आवश्यकता है। यह मॉड्यूल रिसोर्स उपयोग को नियंत्रित भी कर सकता है।
इस मॉड्यूल का उपयोग करने के लिए, हमें इसे आयात करना चाहिए:
import resource
रिसोर्स लिमिट्स
इस मॉड्यूल में हम संसाधन उपयोग को सीमित करने के लिए setrlimit() का उपयोग कर सकते हैं। संसाधनों को सीमित करने के लिए दो पैरामीटर्स हैं। ये पैरामीटर्स सॉफ्ट लिमिट और हार्ड लिमिट हैं। सॉफ्ट लिमिट मूल रूप से वर्तमान सीमा है, यह प्रक्रिया पर बदल सकती है, लेकिन यह हार्ड लिमिट से अधिक नहीं हो सकती। हार्ड लिमिट को सॉफ्ट लिमिट से ऊपर किसी भी मान तक कम किया जा सकता है, लेकिन इसे बढ़ाया नहीं जा सकता।
रिसोर्स लिमिटिंग से संबंधित कुछ मेथड्स और कॉन्स्टेंट्स हैं। ये हैं:
मेथड resource.getrlimit(resource)
यह मेथड सॉफ्ट और हार्ड लिमिट्स को टपल के रूप में लौटाने के लिए उपयोग किया जाता है। यदि निर्दिष्ट रिसोर्स अमान्य है, तो यह ValueError उठाएगा।
मेथड resource.setrlimit(resource, limits)
यह मेथड संसाधनों पर सीमाएं सेट करने के लिए उपयोग किया जाता है। लिमिट्स को सॉफ्ट और हार्ड लिमिट्स के टपल के रूप में असाइन किया जा सकता है। हम असीमित संसाधन बनाने के लिए RLIM_INFINITY का भी उपयोग कर सकते हैं।
मेथड resource.prlimit(pid, resource[, limits])
यह मेथड setrlimit() और getrlimit() मेथड्स का संयोजन है। यह एक मनमाने प्रोसेस के लिए एक ही समय में रिसोर्स लिमिट्स प्राप्त और सेट कर सकता है। जब pid 0 होता है, तो यह वर्तमान प्रोसेस पर काम करता है।
रिसोर्स लिमिट्स से संबंधित कुछ कॉन्स्टेंट्स:
| Sr.No. | कॉन्स्टेंट्स और विवरण |
|---|---|
| 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 सिस्टम में प्स्यूडो टर्मिनल्स की अधिकतम संख्या |
रिसोर्स यूसेज
रिसोर्स यूसेज से संबंधित मेथड्स और कॉन्स्टेंट्स हैं।
मेथड resource.getrusage(who)
यह मेथड वर्तमान प्रोसेस या उसके चिल्ड्रन द्वारा उपयोग किए गए ऑब्जेक्ट को लौटाने के लिए उपयोग किया जाता है। यह विभिन्न फील्ड्स लौटाता है। रिटर्न वैल्यू के फील्ड्स से, हम इस बारे में जानकारी प्राप्त कर सकते हैं कि रिसोर्स का उपयोग कैसे किया गया है।
मेथड resource.getpagesize()
यह मेथड सिस्टम पेज में बाइट्स की संख्या लौटाने के लिए उपयोग किया जाता है। यह भौतिक पेज आकार के समान नहीं हो सकता है।
रिसोर्स यूसेज से संबंधित कुछ कॉन्स्टेंट्स।
| Sr.No. | कॉन्स्टेंट्स और विवरण |
|---|---|
| 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('Resource 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)