Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ข้อมูลการใช้ทรัพยากรโดยใช้ Python


ในการวัดการใช้ทรัพยากร UNIX เราจำเป็นต้องใช้โมดูลทรัพยากรในโปรแกรมของเรา โมดูลนี้ยังสามารถควบคุมการใช้ทรัพยากรได้

ในการใช้โมดูลนี้ เราควรนำเข้าโดยใช้ −

import resource

ขีดจำกัดของทรัพยากร

ในโมดูลนี้ เราสามารถใช้ setrlimit() เพื่อจำกัดการใช้ทรัพยากร มีสองพารามิเตอร์เพื่อจำกัดทรัพยากร พารามิเตอร์เหล่านี้เป็นขีดจำกัดซอฟต์และขีดจำกัดฮาร์ด ขีดจำกัดซอฟต์นั้นเป็นขีดจำกัดปัจจุบัน โดยพื้นฐานแล้ว สามารถเปลี่ยนผ่านกระบวนการได้ แต่จะไม่เกินขีดจำกัดฮาร์ด ค่าฮาร์ดจำกัดสามารถลดลงเป็นค่าใดๆ ที่เกินขีดจำกัดซอฟต์ได้ แต่เพิ่มไม่ได้

มีบางวิธีและค่าคงที่ที่เกี่ยวข้องกับการจำกัดทรัพยากร เหล่านี้คือ.

วิธีการresource.getrlimit(ทรัพยากร)

วิธีนี้ใช้เพื่อคืนค่าขีดจำกัดซอฟต์และฮาร์ดเป็นทูเพิล หากทรัพยากรที่ระบุไม่ถูกต้อง จะเพิ่ม ValueError

วิธีการresource.setrlimit(ทรัพยากร ขีดจำกัด)

วิธีนี้ใช้เพื่อกำหนดขีดจำกัดของทรัพยากร ขีดจำกัดสามารถกำหนดเป็นทูเพิลของขีดจำกัดแบบอ่อนและแบบแข็งได้ นอกจากนี้เรายังสามารถใช้ RLIM_INFINITY เพื่อสร้างทรัพยากรได้ไม่จำกัด

วิธีการresource.prlimit(pid, ทรัพยากร[, limit])

เมธอดนี้เป็นการรวมกันของเมธอด setrlimit() และ getrlimit() สามารถรับและกำหนดขีดจำกัดของทรัพยากรพร้อมกันสำหรับกระบวนการใดก็ได้ เมื่อ pid เป็น 0 มันจะทำงานในกระบวนการปัจจุบัน

ค่าคงที่ที่เกี่ยวข้องกับขีดจำกัดทรัพยากร -

ซีเนียร์ ค่าคงที่ &คำอธิบาย
1

RLIM_INFINITY

จำกัดทรัพยากรไม่จำกัด

2

RLIMIT_CORE

ขนาดสูงสุดของไฟล์หลักที่สร้างโดยกระบวนการปัจจุบัน

3

RLIMIT_CPU

เวลาตัวประมวลผลสูงสุดของโปรเซสเซอร์ เมื่อเกินขีดจำกัด สัญญาณ SIGXCCPU จะถูกส่งไปยังกระบวนการ

4

RLIMIT_DATA

ขนาดสูงสุดของฮีปของโปรเซสเซอร์

5

RLIMIT_STACK

ขนาดสูงสุดของ call stack มันใช้สแต็กของเธรดหลักสำหรับกระบวนการแบบมัลติเธรด

6

RLIMIT_NOFILE

จำนวนสูงสุดของ Open file descriptor สำหรับกระบวนการปัจจุบัน

7

RLIMIT_MEMLOCK

พื้นที่ที่อยู่สูงสุดสำหรับหน่วยความจำที่ถูกล็อก

8

RLIMIT_NICE

เพดานของระดับที่ดีของกระบวนการ

9

RLIMIT_SWAP

ขนาดสูงสุดของพื้นที่สว็อป

10

RLIMIT_NTPS

จำนวนเทอร์มินัลหลอกสูงสุดในระบบ

การใช้ทรัพยากร

มีวิธีการและค่าคงที่ที่เกี่ยวข้องกับการใช้ทรัพยากร

วิธีการทรัพยากร.getrusage(ใคร)

เมธอดนี้ใช้เพื่อส่งคืนอ็อบเจ็กต์ที่ใช้โดยโปรเซสปัจจุบันหรือโปรเซสลูกของมัน ส่งคืนฟิลด์ต่างๆ จากฟิลด์ค่าส่งคืน เราสามารถรับข้อมูลเกี่ยวกับวิธีการใช้ทรัพยากร

วิธีการทรัพยากร.getpagesize()

วิธีนี้ใช้เพื่อส่งคืนจำนวนไบต์ในหน้าระบบ อาจไม่เหมือนกับขนาดหน้าจริง

ค่าคงที่บางอย่างที่เกี่ยวข้องกับการใช้ทรัพยากร

ซีเนียร์ ค่าคงที่ &คำอธิบาย
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)