سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

۲ مطلب با کلمه‌ی کلیدی «پایتون» ثبت شده است

برای من شرایطی بوجود اومد که میخواستم یه برنامه بنویسم به عنوان یک پلتفرم عمل کنه و با استفاده از ماژولهای مختلف که به مرور براش نوشته میشه، یه عمل خاص رو بر روی داده ها انجام بده. مثلا فرض کنید میخواین برای چند نوع فایل متنی متفاوت، چند تا برنامه بنویسین که بیاد رو اونا پراسس انجام بده. شبیه عکس زیر در نظر بگیرین:

RawFile ----> main program ----if type 1 ---> plugin 1(file processing)-----|-->Output

                                       |_if type 2----> plugin 2(file processing)-----|

                                       |_if type 3----> plugin 3(file processing)-----|

                                                                ...

 یه راه سریع اینه که بیاین یه برنامه بنویسین و پلاگین ها رو جدا بنویسین، تو برنامه خودتون هم بیاین و همون پلاگین ها رو تعریف کنین و ساختار داده هاشون رو مقداردهی اولیه کنین. اونوقت، باید برای هر پلاگین جدید که نوشته میشه، یه تغییری تو کد خودتون بدین. این ساختار زیاد خوب نیست، چون تغییرات نیازمندی رو به برنامه اصلی خودتون هم اتصال میدین.

راهی که من استفاده کردم، اینه که یک سوپر کلاس تعریف کردم و تو اون ساختار کلی پلاگین های خودم رو تعریف کردم. مثلا پروپرتی ها و تابع های اصلی رو. یه فولدر تو پروژه خودم قرار دادم که همه پلاگین ها تو اون قرار بگیرن. برای اینکه اضافه کردن پلاگین نیازی به تغییر کد نداشته باشه، باید اولا کدم تمامی پلاگین ها رو اتوماتین لود میکرد و یه عضو ازش میساخت. هر پلاگین هم باید شرطی که نوع فایل مرتبط رو مشخص میکرد همراه با داده های شناسایی خودش به برنامه اصلی میگفت. تو کد من هر کلاس باید یه regex Pattern رو به عنوان الگو خودش به کد اصلی معرفی میکرد تا برنامه اصلی از طریق اون پلاگین مناسب رو انتخاب بکنه.

تو پایتون خیلی راحت میشه یه آرایه از کلاسها ایجاد کرد. فقط باید کلاسها مشخص بشه. برای اینکه بعدا فقط کد پلاگین ها ساخته بشه و هیچ تغییری لازم نباشه، اومدم از بارگذاری خودکار پلاگین ها که تو پایتون هست استفاده کردم.

import importlib, pkgutil, imp
plugins = {}
path = os.path.join(os.path.dirname(__file__),'Plugins')
modules = pkgutil.iter_modules(path=[path])
for loader,mod_name,ispkg in modules:
    if mod_name not in sys.modules:
        if mod_name.startswith('_'):
            mod = importlib.import_module("Plugins."+mod_name)
class_ = getattr(mod,mod_name) t=class_() Plugins[t.name]=t

اینجا برای مشخص شدن پلاگین ها از دیگه فایل ها من اومدم اول اسم فایل پلاگین ها یه "_" گذاشتم و تو شرط اون رو چک کردم.

در نهایت دیکشنری plugins یه کلید داره به اسم کلاس و محتویات اون یه شی از کلاس هست. من اینجا نمیخواستم از کلاس هر بار که لازمم میشه یه اینستنس جدا یسازم (تو پایتون هزینه هز اینستنس از کلاس خیلی زیاده).

۰ موافقین ۰ مخالفین ۰ ۰۱ دی ۹۳ ، ۲۲:۱۵
حامد شیخلو
با سلام
خیلی وقت بوده که به خاطر پایان نامه وقت نکردم پست بنویسم
برای پایان نامه خودم که قسمتی از اون یه شبیه ساز هست، از یک فریم وورک شبیه ساز رخداد گسسته (Discrete Event Simulator) به اسم SimPy که برای پایتون هست استفاده میکنم. بیشتر تو لینوکس کد مینویسم، اما بنا به دلایلی لازم شد تو ویندوز هم کد بنویسم. تو لینوکس خیلی راحت میتونین با دستور pip یا حتی با apt-get هر ماژولی رو نصب کنید. حتی اگر از Pycharm IDE استفاده کنید، میتونید از قسمت مدیریت ماژوا اون استفاده کنید و پکیج ها رو نصب کنید. 
اما یک مشکل وجود داره، اینکه تو ویندوز بعضی پکیج ها وجود نداره یا بنا به دلایلی نصب نمیشه :(
این مشکل بعضی وقتا به خاطر مشکلات اینترنت هست، بعضی وقتا چندتا دپیندنسی وجود نداره و یا اینکه برای اون نسخه ویندوز نسخه کامپایل شده وجود نداره
دو تا راه حل وجود داره، یکی اینکه سورس رو از PyPi بگیرین و خودتون کامپایل کنید، که البته تو برخی موارد باز هم مشکل حل نمیشه و امکان کامپایل وجود نداره
راه حل دوم پیدا کردن و نصب کردن نسخه کامپایل شده برای ویندوز هست که این مشکل راحت ترین و مطمئن ترین راه هست. 
یک وبسایت خیلی خوب که اکثر بسته های مشکل دار ویندوزی (مثلاnumpy) رو داخل خودش داره و خیلی هم بروز هست. این وبسایت مال یکی از اساتید دانشگاه ارواین کالیفرنیا هست.
میتونید از آدرس زیر به این وبسایت دسترسی داشته باشین

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

۱ موافقین ۰ مخالفین ۰ ۲۹ آبان ۹۳ ، ۱۰:۲۶
حامد شیخلو