resource --- اطلاعات مصرف منابع¶
این ماژول سازوکارهای پایهای را برای اندازهگیری و کنترل منابع سیستمی که توسط یک برنامه استفاده میشوند، فراهم میکند.
ثابتهای نمادین برای مشخص کردن منابع سیستمی خاص و درخواست اطلاعات استفاده دربارهی فرایند جاری یا فرزندان آن استفاده میشوند.
در صورت شکست فراخوانی سیستمی، استثنای OSError پرتاب میشود.
-
exception resource.error¶
یک نام مستعار منسوخ از OSError.
تغییر یافته در نسخهی 3.3: پیرو PEP 3151، این کلاس به نام مستعار OSError تبدیل شد.
محدودیتهای منابع¶
مصرف منابع میتواند با استفاده از تابع setrlimit() که در ادامه توضیح داده شده است، محدود شود. هر منبع با یک جفت حد کنترل میشود: یک حد نرم و یک حد سخت. حد نرم، حد فعلی است و ممکن است در طول زمان توسط یک فرایند کاهش یا افزایش یابد. حد نرم هرگز نمیتواند از حد سخت فراتر رود. حد سخت میتواند به هر مقداری که بزرگتر از حد نرم باشد کاهش یابد، اما نمیتواند افزایش یابد. (تنها فرایندهایی که UID مؤثر ابرکاربر را دارند، میتوانند یک حد سخت را افزایش دهند.)
منابع خاصی که میتوانند محدود شوند، به سیستم وابستهاند. این منابع در صفحه راهنمای getrlimit(2) توضیح داده شدهاند. منابع فهرستشده در زیر زمانی پشتیبانی میشوند که سیستمعامل زیربنایی از آنها پشتیبانی کند؛ منابعی که سیستمعامل نمیتواند آنها را بررسی یا کنترل کند، در این ماژول برای آن پلتفرمها تعریف نشدهاند.
-
resource.RLIM_INFINITY¶
ثابتی که برای نشان دادن محدودیت یک منبع نامحدود استفاده میشود.
تغییر یافته در نسخهی 3.15: اکنون همیشه مثبت است. پیش از این، میتوانست منفی باشد، مانند ۱- یا ۳-.
-
resource.RLIM_SAVED_CUR¶
-
resource.RLIM_SAVED_MAX¶
ثابتهایی که برای نشان دادن مقادیر حد نرم و سخت استفاده میشوند، در صورتی که نتوان آنها را در مقدار rlim_t در زبان C نشان داد. میتواند برابر با RLIM_INFINITY باشد.
اضافه شده در نسخهی 3.15.
-
resource.getrlimit(resource)¶
یک تاپل (soft, hard) شامل محدودیتهای نرم و سخت فعلی برای resource برمیگرداند. اگر منبع نامعتبری تعیین شده باشد، ValueError پرتاب میکند، یا اگر فراخوانی سیستمی زیربنایی بهطور غیرمنتظرهای شکست بخورد، error پرتاب میکند.
-
resource.setrlimit(resource, limits)¶
محدودیتهای جدید مصرف resource را تنظیم میکند. آرگومان limits باید یک تاپل (soft, hard) شامل ۲ عدد صحیح باشد که محدودیتهای جدید را توصیف میکند. میتوان از مقدار RLIM_INFINITY برای درخواست محدودیتی نامحدود استفاده کرد.
اگر منبع نامعتبری مشخص شود، اگر محدودیت نرم جدید از محدودیت سخت فراتر رود، یا اگر فرایندی سعی کند محدودیت سخت خود را افزایش دهد، ValueError پرتاب میشود. مشخص کردن محدودیت با مقدار RLIM_INFINITY در حالی که محدودیت سخت یا محدودیت سیستم برای آن منبع نامحدود نباشد، باعث پرتاب ValueError میشود. فرایندی با UID مؤثر ابرکاربر میتواند هر مقدار معتبری برای محدودیت، از جمله نامحدود، درخواست کند، اما اگر محدودیت درخواستی از محدودیت اعمالشده از سوی سیستم فراتر رود، همچنان ValueError پرتاب میشود.
همچنین ممکن است setrlimit در صورت شکست خوردن فراخوانی سیستمی زیربنایی، error را پرتاب کند.
VxWorks فقط از تنظیم RLIMIT_NOFILE پشتیبانی میکند.
یک رویداد حسابرسی resource.setrlimit را با آرگومانهای resource و limits پرتاب میکند.
-
resource.prlimit(pid, resource[, limits])¶
setrlimit() و getrlimit() را در یک تابع ترکیب میکند و امکان دریافت و تنظیم محدودیتهای منابع یک فرایند دلخواه را فراهم میسازد. اگر pid برابر ۰ باشد، این فراخوانی به فرایند جاری اعمال میشود. resource و limits همان معنایی را دارند که در setrlimit() دارند، با این تفاوت که limits اختیاری است.
هنگامی که limits داده نشود، تابع محدودیت منبع فرایند pid را برمیگرداند. هنگامی که limits داده شود، محدودیت منبع فرایند تنظیم میشود و محدودیت منبع پیشین برگردانده میشود.
ProcessLookupError را هنگامی که pid یافت نشود و PermissionError را هنگامی که کاربر CAP_SYS_RESOURCE برای فرایند نداشته باشد، پرتاب میکند.
یک رویداد حسابرسی resource.prlimit را با آرگومانهای pid، resource و limits پرتاب میکند.
این نمادها منابعی را تعریف میکنند که مصرف آنها را میتوان با استفاده از توابع setrlimit() و getrlimit() که در ادامه توضیح داده شدهاند، کنترل کرد. مقادیر این نمادها دقیقاً همان ثابتهایی هستند که برنامههای C از آنها استفاده میکنند.
صفحه راهنمای یونیکس برای getrlimit(2) منابع موجود را فهرست میکند. توجه داشته باشید که تمام سیستمها از نماد یا مقدار یکسانی برای نشان دادن یک منبع یکسان استفاده نمیکنند. این ماژول تلاش نمیکند تفاوتهای سکو را بپوشاند --- نمادهایی که برای یک سکو تعریف نشدهاند، در آن سکو از این ماژول در دسترس نخواهند بود.
-
resource.RLIMIT_CORE¶
حداکثر اندازهی پرونده core (بر حسب بایت) که فرایند جاری میتواند ایجاد کند. این موضوع ممکن است منجر به ایجاد یک پرونده core ناقص شود، در صورتی که برای دربرگرفتن کل تصویر فرایند به core بزرگتری نیاز باشد.
-
resource.RLIMIT_CPU¶
حداکثر مقدار زمان پردازنده (بر حسب ثانیه) که یک فرایند میتواند از آن استفاده کند. در صورت عبور از این محدودیت، یک سیگنال SIGXCPU به فرایند ارسال میشود. (برای اطلاعات در مورد نحوهی دریافت این سیگنال و انجام کاری مفید، مثلاً تخلیهی پروندههای باز روی دیسک، مستندات ماژول signal را ببینید.)
-
resource.RLIMIT_FSIZE¶
حداکثر اندازهی پروندهای که فرایند میتواند ایجاد کند.
-
resource.RLIMIT_DATA¶
حداکثر اندازهی انباشت فرایند (به بایت)
-
resource.RLIMIT_STACK¶
حداکثر اندازهی پشتهی فراخوانی برای فرایند جاری (بر حسب بایت). این فقط بر پشتهی نخ اصلی در یک فرایند چندنخی تأثیر میگذارد.
-
resource.RLIMIT_RSS¶
حداکثر اندازهی مجموعه مقیم (resident set size) که باید در دسترس فرایند قرار گیرد.
-
resource.RLIMIT_NPROC¶
حداکثر تعداد فرایندهایی که فرایند جاری میتواند ایجاد کند.
-
resource.RLIMIT_NOFILE¶
حداکثر تعداد توصیفگرهای پرونده باز برای فرایند جاری.
-
resource.RLIMIT_OFILE¶
نام BSD برای RLIMIT_NOFILE.
-
resource.RLIMIT_MEMLOCK¶
حداکثر فضای آدرسی که میتواند در حافظه قفل شود.
-
resource.RLIMIT_VMEM¶
بزرگترین ناحیهی حافظهی نگاشتشده که فرایند ممکن است اشغال کند. معمولاً نام مستعاری از RLIMIT_AS است.
-
resource.RLIMIT_AS¶
حداکثر ناحیه (به بایت) از فضای آدرس که ممکن است توسط فرایند اشغال شود.
-
resource.RLIMIT_MSGQUEUE¶
تعداد بایتهایی که میتوان برای صفهای پیام POSIX تخصیص داد.
-
resource.RLIMIT_NICE¶
سقف سطح nice فرایند (که بهصورت 20 - rlim_cur محاسبه میشود).
-
resource.RLIMIT_RTPRIO¶
سقف اولویت بیدرنگ.
-
resource.RLIMIT_RTTIME¶
محدودیت زمانی (بر حسب میکروثانیه) برای زمان پردازندهای که یک فرایند میتواند تحت زمانبندی بلادرنگ بدون انجام یک فراخوانی سیستمی مسدودکننده صرف کند.
-
resource.RLIMIT_SIGPENDING¶
تعداد سیگنالهایی که فرایند میتواند در صف قرار دهد.
-
resource.RLIMIT_SBSIZE¶
حداکثر اندازهی مصرف بافر سوکت (به بایت) برای این کاربر. این میزان حافظه شبکه، و در نتیجه میزان mbufها (mbufs)، را که این کاربر ممکن است در هر زمان در اختیار داشته باشد محدود میکند.
-
resource.RLIMIT_SWAP¶
حداکثر اندازه (به بایت) فضای مبادلهای که ممکن است تمام فرآیندهای این شناسه کاربری آن را رزرو یا استفاده کنند. این محدودیت تنها در صورتی اعمال میشود که بیت ۱ از sysctlِ vm.overcommit تنظیم شده باشد. لطفاً برای توضیح کامل این sysctl، tuning(7) را ببینید.
-
resource.RLIMIT_NPTS¶
حداکثر تعداد شبهپایانهها (pseudo-terminals) که توسط این شناسه کاربری ایجاد شدهاند.
-
resource.RLIMIT_KQUEUES¶
حداکثر تعداد kqueueهایی که این شناسه کاربری مجاز به ایجاد آنها است.
اضافه شده در نسخهی 3.10.
-
resource.RLIMIT_NTHR¶
حداکثر تعداد نخها برای این شناسه کاربری، بدون احتساب نخهای اصلی و هسته.
اضافه شده در نسخهی 3.15.
-
resource.RLIMIT_PIPEBUF¶
حداکثر اندازهی کل بافرهای درونهستهای برای پایپها/فایفوهای دوسویه که این شناسهی کاربری مجاز به مصرف آنها است.
اضافه شده در نسخهی 3.15.
-
resource.RLIMIT_THREADS¶
حداکثر تعداد نخهایی که هر فرایند میتواند ایجاد کند.
اضافه شده در نسخهی 3.15.
-
resource.RLIMIT_UMTXP¶
حد تعداد اشیای کتابخانهی نخ Posix که بین فرایندها به اشتراک گذاشته شدهاند و توسط شناسهی کاربری تخصیص داده میشوند.
اضافه شده در نسخهی 3.15.
استفاده از منابع¶
این توابع برای بازیابی اطلاعات استفاده از منابع به کار میروند:
-
resource.getrusage(who)¶
این تابع شیءای را برمیگرداند که منابع مصرفشده توسط فرایند جاری یا فرایندهای فرزند آن را توصیف میکند، همانطور که با پارامتر who مشخص شده است. پارامتر who باید با استفاده از یکی از ثابتهای RUSAGE_* که در ادامه توضیح داده شدهاند، مشخص شود.
یک مثال ساده:
from resource import *
import time
# a non CPU-bound task
time.sleep(3)
print(getrusage(RUSAGE_SELF))
# a CPU-bound task
for i in range(10 ** 8):
_ = 1 + 1
print(getrusage(RUSAGE_SELF))
هر یک از فیلدهای مقدار بازگشتی، نحوه استفاده از یک منبع سیستمی خاص را توصیف میکنند، برای مثال میزان زمانی که در حالت کاربر صرف اجرا شده یا تعداد دفعاتی که فرایند از حافظه اصلی خارجشده است. برخی مقادیر به بازه تیک ساعت وابستهاند، برای مثال میزان حافظهای که فرایند در حال استفاده از آن است.
برای سازگاری با نسخههای پیشین، مقدار بازگشتی همچنین بهصورت تاپلی از ۱۶ المان قابل دسترسی است.
فیلدهای ru_utime و ru_stime از مقدار بازگشتی، مقادیر ممیز شناور هستند که بهترتیب نشاندهندهی میزان زمان صرفشده برای اجرا در حالت کاربر و میزان زمان صرفشده برای اجرا در حالت سیستم هستند. مقادیر باقیمانده، اعداد صحیح هستند. برای اطلاعات تفصیلی دربارهی این مقادیر به صفحه راهنمای getrusage(2) مراجعه کنید. خلاصهای کوتاه در اینجا ارائه شده است:
اندیس |
فیلد |
منبع |
0
|
ru_utime
|
زمان در حالت کاربر (ثانیههای شناور) |
1
|
ru_stime
|
زمان در حالت سیستم (ثانیه بهصورت float) |
2
|
ru_maxrss
|
حداکثر اندازه مجموعه مقیم |
3
|
ru_ixrss
|
اندازهی حافظهی مشترک |
4
|
ru_idrss
|
اندازهی حافظهی غیرمشترک |
5
|
ru_isrss
|
اندازهی پشتهی اشتراکگذارینشده |
6
|
ru_minflt
|
خطاهای صفحه بدون نیاز به ورودی/خروجی |
7
|
ru_majflt
|
خطاهای صفحه نیازمند I/O |
8
|
ru_nswap
|
تعداد خروجهای مبادله |
9
|
ru_inblock
|
عملیاتهای ورودی بلوک |
10
|
ru_oublock
|
عملیاتهای خروجی بلوک |
11
|
ru_msgsnd
|
پیامهای ارسالشده |
12
|
ru_msgrcv
|
پیامهای دریافتی |
13
|
ru_nsignals
|
سیگنالهای دریافتشده |
14
|
ru_nvcsw
|
تعویضهای زمینه داوطلبانه |
15
|
ru_nivcsw
|
تعویضهای غیرارادی زمینه |
این تابع در صورت مشخص شدن یک پارامتر who نامعتبر، یک ValueError را پرتاب میکند. همچنین ممکن است در شرایط غیرمعمول، استثنای error را نیز پرتاب کند.
-
resource.getpagesize()¶
تعداد بایتهای یک صفحهی سیستم را برمیگرداند. (این مقدار لزوماً برابر با اندازهی صفحهی سختافزاری نیست.)
نمادهای RUSAGE_* زیر به تابع getrusage() داده میشوند تا مشخص کنند اطلاعات کدام فرایندها باید ارائه شود.
-
resource.RUSAGE_SELF¶
آن را به getrusage() ارسال کنید تا منابع مصرفشده توسط فرایند فراخوان درخواست شود، که مجموع منابع استفادهشده توسط همه نخهای درون فرایند است.
-
resource.RUSAGE_CHILDREN¶
به getrusage() بفرستید تا منابع مصرفشده توسط فرایندهای فرزند فرایند فراخوان، که پایانیافتهاند و انتظارشان کشیده شده است، درخواست شود.
-
resource.RUSAGE_BOTH¶
به getrusage() ارسال کنید تا منابع مصرفشده توسط فرآیند فعلی و فرآیندهای فرزند درخواست شود. ممکن است در همهی سیستمها در دسترس نباشد.
-
resource.RUSAGE_THREAD¶
برای درخواست منابع مصرفشده توسط نخ جاری، آن را به getrusage() بدهید. ممکن است در همهی سیستمها در دسترس نباشد.
©
حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به
تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا
اشکالی یافتید؟
ساخته شده با
Sphinx 9.1.0.