به عنوان تأمین کننده محصولات راکتور ، اغلب در مورد اجرای عملی الگوی راکتور در پایتون سؤال می شود. الگوی راکتور یک الگوی رسیدگی به رویداد برای رسیدگی به درخواست های خدمات است که همزمان به یک سرویس دهنده ارائه می شود. در این پست وبلاگ ، نمونه مفصلی از اجرای الگوی راکتور در پایتون را ارائه می دهم و در مورد اهمیت آن در ارائه محصولات راکتور ما بحث می کنم.


درک الگوی راکتور
الگوی راکتور مبتنی بر ایده یک Demultiplexer رویداد و یک کنترل کننده رویداد است. این رویداد Demultiplexer منتظر وقوع وقایع مانند رویدادهای شبکه I/O یا رویدادهای تایمر است و سپس این رویدادها را به دستگیرندگان رویداد مناسب اعزام می کند. این الگوی به ویژه در ساخت برنامه های کاربردی همزمان ، مانند سرورهای شبکه مفید است.
اجزای اصلی الگوی راکتور عبارتند از:
- demultiplexer رویداد: این مؤلفه منتظر وقایع در چندین منبع ورودی است. در پایتون ،
انتخاب کردنماژول می تواند به عنوان یک demultiplexer رویداد استفاده شود. - دستگیرندگان رویداد: اینها مؤلفه هایی هستند که رویدادهای خاص را اداره می کنند. هر کنترل کننده رویداد با یک منبع ورودی خاص و نوعی رویداد همراه است.
- راکتور: راکتور مدیریت رویداد demultiplexer و دستگیرندگان رویداد را مدیریت می کند. این برنامه ها را با رویداد demultiplexer رویداد ثبت می کند و رویدادها را به دستگیرندگان مناسب اعزام می کند.
اجرای پایتون از الگوی راکتور
بیایید با ایجاد یک مثال ساده از سرور شبکه با استفاده از الگوی راکتور در پایتون شروع کنیم.
واردات Select Socket Class EventHandler: def fileno (self): notimemplementederror def handre_read (self): pass def handre_write (خود): tcpserverhandler (eventhandler): def __init __ (self ، host ، port): self.server_socket = socket.socket.socket. self.server_socket.setsockopt (socket.sol_socket ، socket.so_reuseaddr ، 1) self.server_socket.bind ((میزبان ، پورت)) self.server_socket.listen (5) def fileno (self) def.ser.server_socket_socket.socket.socket.fileno () def_rady () def_rady () def) self.server_socket.accept () print (f "اتصال پذیرفته شده از {client_address}") # در اینجا ما می توانیم یک کنترل کننده جدید برای مشتری Socket Client_Handler = tcpclienthandler (tcpclienthandler) reactor.register_handler (client_handler) کلاس tcpclienthandherhandler (eventshandler): def __init __init __init __init __init ( client_socket def fileno (self): Return self.client_socket.fileno () def handle_read (self): data = خود. client_socket.recv (1024) اگر داده ها: چاپ داده ها: داده های دریافت شده: {data.decode ('utf - 8')) # در اینجا می توانیم پاسخ خود را ارسال کنیم. self.client_socket.close () reactor.unregister_handler (self) کلاس راکتور: def __init __ (self): self.read_handlers =} def Register_handler (خود ، دستیار): self.read_handlers [handler.fileno ()] = دستگیرنده def def unregister_handler (self ، handler)) self.read_handlers: del self.read_handlers [handler.fileno ()] def run (self): در حالی که درست: read_fds = لیست (self.read_handlers.keys ()) قابل خواندن ، _ ، _ = select.select (read_fds ، []) برای fd در خواندنی: handler [fd] hander.read_handlers [fd] hander.read_handlers [fd] hander.readler reactor نمونه reactor = reactor () # server server server_handler = tcpserverhandler ('localhost' ، 8888) reactor.register_handler (server_handler) # راکتور راکتور را شروع کنید و ثبت کنید.
در این مثال:
- رویداد: این یک کلاس پایه انتزاعی برای همه گیرنده های رویداد است. تعریف می کند
کتابروش ، که توصیف کننده فایل منبع ورودی را برمی گرداند ودسته را بخوانیدوتدستگیرهروشها ، که به ترتیب برای رسیدگی به رویدادهای خواندن و نوشتن استفاده می شوند. - tcpser-: این کنترل کننده رویداد برای سوکت سرور است. هنگامی که یک اتصال جدید دریافت می شود ، یک جدید ایجاد می کند
TCPClientHandlerبرای سوکت مشتری و آن را با راکتور ثبت می کند. - TCPClientHandler: این کنترل کننده رویداد برای سوکت مشتری است. این داده ها را از سوکت مشتری می خواند و در صورت دریافت داده پاسخ می دهد. اگر مشتری قطع شود ، سوکت را می بندد و خود را از راکتور ثبت نمی کند.
- راکتور: این کلاس مدیریت کنندگان رویداد و رویداد Demultiplexer را مدیریت می کند. از آن استفاده می کند
انتخاب کردنماژول برای انتظار برای خواندن رویدادها در توصیف کننده های پرونده ثبت شده و اعزام این رویدادها به دستگیرندگان مناسب.
ارتباط با محصولات راکتور ما
در زمینه ماراکتورمحصولات ، الگوی راکتور را می توان در سیستم های کنترل راکتورهای ما استفاده کرد. به عنوان مثال ، در یک راکتور شیمیایی ، ممکن است چندین سنسور و محرک وجود داشته باشد که وقایع ایجاد می کنند. از الگوی راکتور می توان برای رسیدگی به این وقایع به روشی همزمان و کارآمد استفاده کرد.
Demultiplexer رویداد می تواند سنسورها را برای وقایع مانند تغییرات دما ، تغییر فشار یا تغییر سرعت جریان نظارت کند. پسران این رویداد می توانند بر اساس این وقایع ، مانند تنظیم جریان واکنش دهنده ها ، شروع یا متوقف کردن یک عنصر گرمایش یا ایجاد زنگ هشدار ، اقدامات مناسبی انجام دهند.
به همین ترتیب ، در کنترل سایر کشتی های فشار مانندنای سازوتکانتینر، از الگوی راکتور می توان برای مدیریت رویدادهای مختلف ورودی و خروجی به طور مؤثر استفاده کرد.
پایان
الگوی راکتور یک الگوی قدرتمند است که می تواند به طور مؤثر در پایتون اجرا شود. این راهی برای رسیدگی به چندین رویداد به طور همزمان فراهم می کند ، که در ساخت برنامه های عملکردی بالا بسیار مهم است. در زمینه محصولات راکتور ما ، از الگوی راکتور می توان برای مدیریت سیستم های کنترل پیچیده - محور استفاده کرد.
اگر به محصولات راکتور ما علاقه مند هستید یا در مورد اجرای الگوی راکتور سؤالی دارید ، ما شما را ترغیب می کنیم تا برای یک بحث تهیه دقیق با ما تماس بگیرید. تیم متخصصان ما آماده است تا در یافتن بهترین راه حل ها برای نیازهای خاص خود به شما کمک کند.
منابع
- "الگوهای طراحی: عناصر شیء قابل استفاده مجدد - نرم افزار گرا" توسط اریش گاما ، ریچارد هلم ، رالف جانسون و جان ولیسیدس.
- مستندات پایتون در
انتخاب کردنماژول
