رفتن به مطلب
بازگشایی انجمن! ×
GuardIran

محدود کردن منابع در پایتون (لینوکس)


R3XCR4PY

پست های پیشنهاد شده

با سلام و خسته نباشید خدمت همه دوستان.

در این تاپیک نحوه محدود کردن منابع مصرفی توسط برنامه رو یاد میگیریم.

 

تابع getrlimit و setrlimit:

تابع getrlimit: یک پارامتر میگیره که نوع منبع (resource) هست و محدودیت فعلی اون منبع رو به شکل tuple برمیگردونه.

تابع setrlimit: دو پارامتر میگیره که اولی نوع منبع و دومی یک tuple که محدودیتی است که میخواهیم روی اون منبع بگذاریم.

 

محدود کردن مصرف CPU:

در محدود کردن مصرف CPU دو عدد وجود داره: soft limit و hard limit.

soft limit: وقتی میزان مصرف برنامه به این عدد برسه سیگنال SIGXCPU به برنامه ارسال میشه و عملی که به صورت پیشفرض برای این سیگنال تعریف شده خاتمه دادن (TERMINATE) برنامه هست. اگر این توسط برنامه نویس عوض بشه و برنامه در هنگام دریافت این سیگنال خاتمه پیدا نکنه و به مصرف کردن CPU ادامه بده هر یک ثانیه یک بار سیگنال SIGXCPU ارسال میشه تا زمانی که مصرف به hard limit برسه.

hard limit: به برنامه سیگنال SIGKILL ارسال میشه و برنامه kill میشه.

 

This is the hidden content, please

توضیح کد:

۱- مقدار پیشفرض soft و hard رو با تابع getrlimit میگیریم. (اگر مقدار soft یا hard برابر با -1 باشد یعنی محدودیتی تعریف نشده)

۲- با استفاده از تابع setrlimit محدودیت را برای میزان مصرف CPU تنظیم میکنیم. (در پارامتر دوم تابع setrlimit یک tuple ارسال میکنیم که مقدار اول soft limit و مقدار دوم hard limit است)

۳- با استفاده از تابع signal کار پیشفرضی که برای سیگنال SIGXCPU تعریف شده را با یک تابع جایگزین میکنیم. یعنی وقتی سیگنال SIGXCPU دریافت شود تابع cpu_time_exceeded فراخوانی می شود.

۴- یک حلقه بی نهایت تعریف شده و چون برای مصرف CPU محدودیت تعریف کردیم بعد از 20 ثانیه از برنامه خارج می شود.

 

محدود کردن مصرف RAM: 

اگر برنامه بیشتر از عدد مشخص شده (به بایت) از حافظه استفاده کند ارور MemoryError به وجود می آید.

This is the hidden content, please

توضیح کد:

۱- مانند مرحله قبل ابتدا مقادیر پیشفرض soft limit و hard limit گرفته میشه و بعد با کمک تابع setrlimit مصرف رم به ۱۰ بایت محدود میشه.

۲- با استفاده از تابع range اعداد ۰ تا ۲۰۰۰۰۰ برگردانده میشوند و به خاطر اینکه میزان مصرف حافظه این لیست بیشتر از ۱۰ بایت است برنامه ارور MemoryError میده.

 

 

حداکثر سایز فایلی که برنامه میتونه ایجاد کنه:

با این محدودیت میتونیم برنامه رو محدود کنیم که نتونه فایل هایی که حجمشون بیشتر از عددی  هست که بهش دادیم (‌به بایت) بسازه.

در صورتی که برنامه بخواد فایلی بسازه که حجمش از محدودیتی که تعیین کردیم بیشتر باشه سیگنال SIGXFSZ به برنامه ارسال میشه و به صورت پیشفرض برنامه خطای OSError میده.

This is the hidden content, please

توضیح کد:

۱- محدودیت حجم فایل بر روی ۲۰ بایت تنظیم میشه.

۲- وقتی بخواهیم فایلی بزرگتر از ۲۰ بایت ایجاد کنیم برنامه ارور OSError میده.

 

This is the hidden content, please

توضیح کد:

اینجا تابع file_size_exceeded به جای کار پیشفرض فراخوانی میشه.

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • ایجاد مورد جدید...