discord icon
سرور دیسکورد گاردایران

KR0N0S

کاربر فعال
  • تعداد ارسال ها

    93
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    3

آخرین بار برد KR0N0S در 23 اردیبهشت

KR0N0S یکی از رکورد داران بیشترین تعداد پسند مطالب است !

6 دنبال کننده

درباره KR0N0S

  • درجه
    1
  • تاریخ تولد 1 فروردین 1300

اطلاعات فردی

  • جنسیت
    آقا

آخرین بازدید کنندگان نمایه

1,687 بازدید کننده نمایه
  1. با سلام و خسته نباشید خدمت همه دوستان. در این تاپیک نحوه محدود کردن منابع مصرفی توسط برنامه رو یاد میگیریم. تابع 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 میشه. import resource import signal CPU_TIME_LIMIT = 20 # 20 seconds def cpu_time_exceeded(signo, frame): print("CPU exceeded!") raise SystemExit(1) soft, hard = resource.getrlimit(resource.RLIMIT_CPU) resource.setrlimit(resource.RLIMIT_CPU, (CPU_TIME_LIMIT, hard)) signal.signal(signal.SIGXCPU, cpu_time_exceeded) while True: pass توضیح کد: ۱- مقدار پیشفرض soft و hard رو با تابع getrlimit میگیریم. (اگر مقدار soft یا hard برابر با -1 باشد یعنی محدودیتی تعریف نشده) ۲- با استفاده از تابع setrlimit محدودیت را برای میزان مصرف CPU تنظیم میکنیم. (در پارامتر دوم تابع setrlimit یک tuple ارسال میکنیم که مقدار اول soft limit و مقدار دوم hard limit است) ۳- با استفاده از تابع signal کار پیشفرضی که برای سیگنال SIGXCPU تعریف شده را با یک تابع جایگزین میکنیم. یعنی وقتی سیگنال SIGXCPU دریافت شود تابع cpu_time_exceeded فراخوانی می شود. ۴- یک حلقه بی نهایت تعریف شده و چون برای مصرف CPU محدودیت تعریف کردیم بعد از 20 ثانیه از برنامه خارج می شود. محدود کردن مصرف RAM: اگر برنامه بیشتر از عدد مشخص شده (به بایت) از حافظه استفاده کند ارور MemoryError به وجود می آید. import signal import resource MEMORY_LIMIT = 10 # 10 bytes soft, hard = resource.getrlimit(resource.RLIMIT_AS) resource.setrlimit(resource.RLIMIT_AS, (MEMORY_LIMIT, hard)) data = list(range(0, 200000)) # MemoryError توضیح کد: ۱- مانند مرحله قبل ابتدا مقادیر پیشفرض soft limit و hard limit گرفته میشه و بعد با کمک تابع setrlimit مصرف رم به ۱۰ بایت محدود میشه. ۲- با استفاده از تابع range اعداد ۰ تا ۲۰۰۰۰۰ برگردانده میشوند و به خاطر اینکه میزان مصرف حافظه این لیست بیشتر از ۱۰ بایت است برنامه ارور MemoryError میده. حداکثر سایز فایلی که برنامه میتونه ایجاد کنه: با این محدودیت میتونیم برنامه رو محدود کنیم که نتونه فایل هایی که حجمشون بیشتر از عددی هست که بهش دادیم (‌به بایت) بسازه. در صورتی که برنامه بخواد فایلی بسازه که حجمش از محدودیتی که تعیین کردیم بیشتر باشه سیگنال SIGXFSZ به برنامه ارسال میشه و به صورت پیشفرض برنامه خطای OSError میده. import signal import resource FILE_SIZE_LIMIT = 20 # 20 bytes soft, hard = resource.getrlimit(resource.RLIMIT_FSIZE) resource.setrlimit(resource.RLIMIT_FSIZE, (FILE_SIZE_LIMIT, hard)) with open("test.txt", "w") as f: f.write("a"*21) # OSError: [Errno 27] File too large توضیح کد: ۱- محدودیت حجم فایل بر روی ۲۰ بایت تنظیم میشه. ۲- وقتی بخواهیم فایلی بزرگتر از ۲۰ بایت ایجاد کنیم برنامه ارور OSError میده. import signal import resource FILE_SIZE_LIMIT = 40 # 40 bytes def file_size_exceeded(signo, frame): print("File too large") raise SystemExit(1) soft, hard = resource.getrlimit(resource.RLIMIT_FSIZE) resource.setrlimit(resource.RLIMIT_FSIZE, (FILE_SIZE_LIMIT, hard)) signal.signal(signal.SIGXFSZ, file_size_exceeded) with open("file.txt", "w") as f: f.write("a" * 50) # File too large & exit program توضیح کد: اینجا تابع file_size_exceeded به جای کار پیشفرض فراخوانی میشه.
  2. KR0N0S

    حل سوالات سایت Quera

    سوال: صبا و سوال ساده https://b2n.ir/585297 program.rb Program.java program.py
  3. KR0N0S

    حل سوالات سایت Quera

    سوال: گردو شکستم https://b2n.ir/037440 توضیح: روی مضرب های x از 0 تا جایی که حاصلش از n بیشتر نباشه پیمایش میکنیم. هربار عدد رو در x ضرب میکنیم و حاصل رو از n کم میکنیم بعد چک میکنیم که عدد بدست اومده به y بخش پذیر هست یا نه. در واقع اعداد مختلف رو به جای مضرب x می‌ذاریم و چک میکنیم که آیا میشه عددی به جای y گذاشت که حاصل جمعشون n بشه. اگر این عدد وجود داشته باشه i به عنوان تعداد xها و حاصل تقسیم به عنوان تعداد yها در خروجی چاپ میشه. اگر وجود نداشته باشه حلقه به پایان میرسه و -1 در خروجی چاپ میشه. program.py program.cpp
  4. KR0N0S

    حل سوالات سایت Quera

    سوال: خُب باقر سرما خورده https://b2n.ir/e33907 program.py program.c
  5. مجموعه ای از ابزارها و سرویس های رایگان برای برنامه نویس ها:

    free-for.dev

  6. KR0N0S

    حل سوالات سایت Quera

    سوال: تو چقدر اضافه وزن داری؟ https://b2n.ir/785885 program.py program.cpp
  7. KR0N0S

    حل سوالات سایت Quera

    سوال: رشته فیبوناچی https://b2n.ir/055190 program.c program.py
  8. KR0N0S

    حل سوالات سایت Quera

    سوال: شارژ موبایل https://b2n.ir/040446 program.py program.rb Program.java program.c
  9. KR0N0S

    حل سوالات سایت Quera

    سوال: سوال برنامه نویسی برنامه نویسی سوال https://b2n.ir/w27089 program.pl program.cpp program.py program.rb
  10. KR0N0S

    حل سوالات سایت Quera

    سوال: تست بینایی https://b2n.ir/997305 program.py Program.java
  11. KR0N0S

    حل سوالات سایت Quera

    سوال: بلندگو https://b2n.ir/651861 program.cpp program.py
  12. KR0N0S

    حل سوالات سایت Quera

    سوال: ام سین https://b2n.ir/t37594 program.py program.c
  13. KR0N0S

    حل سوالات سایت Quera

    سوال: بهداشت و سلامت https://b2n.ir/064854 program.rb program.py Program.java
  14. KR0N0S

    حل سوالات سایت Quera

    سوال: شطرنج حرفه‌ای https://b2n.ir/571633 program.pl program.py program.c
  15. KR0N0S

    هک شدن بیت کوین

    سلام. ظاهرا هکرها از یک سرور پرداخت استفاده می کردند و FBI به اون دسترسی پیدا کرده و کلید خصوصی کیف پول رو از اون سیستم برداشته. این مشکل هم از بیت کوین نیست مشکل از فرد بوده که کلید رو جای امنی نگه نداشته.