电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python定義一個Actor任務

瀏覽:3日期:2022-07-16 08:00:29

問題

你想定義跟actor模式中類似“actors”角色的任務

解決方案

actor模式是一種最古老的也是最簡單的并行和分布式計算解決方案。 事實上,它天生的簡單性是它如此受歡迎的重要原因之一。 簡單來講,一個actor就是一個并發執行的任務,只是簡單的執行發送給它的消息任務。 響應這些消息時,它可能還會給其他actor發送更進一步的消息。 actor之間的通信是單向和異步的。因此,消息發送者不知道消息是什么時候被發送, 也不會接收到一個消息已被處理的回應或通知。

結合使用一個線程和一個隊列可以很容易的定義actor,例如:

from queue import Queuefrom threading import Thread, Event# Sentinel used for shutdownclass ActorExit(Exception): passclass Actor: def __init__(self): self._mailbox = Queue() def send(self, msg): ’’’ Send a message to the actor ’’’ self._mailbox.put(msg) def recv(self): ’’’ Receive an incoming message ’’’ msg = self._mailbox.get() if msg is ActorExit: raise ActorExit() return msg def close(self): ’’’ Close the actor, thus shutting it down ’’’ self.send(ActorExit) def start(self): ’’’ Start concurrent execution ’’’ self._terminated = Event() t = Thread(target=self._bootstrap) t.daemon = True t.start() def _bootstrap(self): try: self.run() except ActorExit: pass finally: self._terminated.set() def join(self): self._terminated.wait() def run(self): ’’’ Run method to be implemented by the user ’’’ while True: msg = self.recv()# Sample ActorTaskclass PrintActor(Actor): def run(self): while True: msg = self.recv() print(’Got:’, msg)# Sample usep = PrintActor()p.start()p.send(’Hello’)p.send(’World’)p.close()p.join()

這個例子中,你使用actor實例的 send() 方法發送消息給它們。 其機制是,這個方法會將消息放入一個隊里中, 然后將其轉交給處理被接受消息的一個內部線程。 close() 方法通過在隊列中放入一個特殊的哨兵值(ActorExit)來關閉這個actor。 用戶可以通過繼承Actor并定義實現自己處理邏輯run()方法來定義新的actor。 ActorExit 異常的使用就是用戶自定義代碼可以在需要的時候來捕獲終止請求 (異常被get()方法拋出并傳播出去)。

如果你放寬對于同步和異步消息發送的要求, 類actor對象還可以通過生成器來簡化定義。例如:

def print_actor(): while True: try: msg = yield # Get a message print(’Got:’, msg) except GeneratorExit: print(’Actor terminating’)# Sample usep = print_actor()next(p) # Advance to the yield (ready to receive)p.send(’Hello’)p.send(’World’)p.close()

討論

actor模式的魅力就在于它的簡單性。 實際上,這里僅僅只有一個核心操作 send() . 甚至,對于在基于actor系統中的“消息”的泛化概念可以已多種方式被擴展。 例如,你可以以元組形式傳遞標簽消息,讓actor執行不同的操作,如下:

class TaggedActor(Actor): def run(self): while True: tag, *payload = self.recv() getattr(self,’do_’+tag)(*payload) # Methods correponding to different message tags def do_A(self, x): print(’Running A’, x) def do_B(self, x, y): print(’Running B’, x, y)# Examplea = TaggedActor()a.start()a.send((’A’, 1)) # Invokes do_A(1)a.send((’B’, 2, 3)) # Invokes do_B(2,3)a.close()a.join()

作為另外一個例子,下面的actor允許在一個工作者中運行任意的函數, 并且通過一個特殊的Result對象返回結果:

from threading import Eventclass Result: def __init__(self): self._evt = Event() self._result = None def set_result(self, value): self._result = value self._evt.set() def result(self): self._evt.wait() return self._resultclass Worker(Actor): def submit(self, func, *args, **kwargs): r = Result() self.send((func, args, kwargs, r)) return r def run(self): while True: func, args, kwargs, r = self.recv() r.set_result(func(*args, **kwargs))# Example useworker = Worker()worker.start()r = worker.submit(pow, 2, 3)worker.close()worker.join()print(r.result())

最后,“發送”一個任務消息的概念可以被擴展到多進程甚至是大型分布式系統中去。 例如,一個類actor對象的 send() 方法可以被編程讓它能在一個套接字連接上傳輸數據 或通過某些消息中間件(比如AMQP、ZMQ等)來發送。

以上就是Python定義一個Actor任務的詳細內容,更多關于Python actor任務的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 执业药师报名时间,报考条件,考试时间-首页入口 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 湖南自考_湖南自学考试| 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 手持式浮游菌采样器-全排二级生物安全柜-浙江孚夏医疗科技有限公司 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 查分易-成绩发送平台官网| 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 |