Pykkaでping pong
Pythonでactor model使いたかったので忘備録として
Pykka
Pythonのactor model frameworkです.
インストール方法
pip install pykka
Actorの実装方法
標準のThreadによる実装やgeventなどがある.
ドキュメントに gevent の方が一般的に Thread よりも早いことが記載されている.
gevent実装のActorを使用する場合,geventのインストール方法
pip install gevent
通信方法
ask は同期通信,tell は非同期通信となっている.
ask の場合は返り値を受け取れるが,tell の場合は None が返り値となる.
ping pong
pingというメッセージに対してpongを返すサンプルを書いてみる.
以下は threading.Thread の実装
from pykka import ThreadingActor class Actor(ThreadingActor): def __init__(self): super().__init__() def on_receive(self, message): print('recieve:', message) return 'pong' actor = Actor.start() r = actor.tell('ping') # None print('tell:', r) r = actor.ask('ping') # pong print('ask:', r) actor.stop() ''' tell: None recieve: ping recieve: ping ask: pong '''
以下は gevent の実装
from pykka.gevent import GeventActor class Gactor(GeventActor): def __init__(self): super().__init__() def on_receive(self, message): print('recieve:', message) return 'pong' gactor = Gactor.start() r = gactor.tell('ping') print('tell:', r) r = gactor.ask('ping') print('ask:', r) gactor.stop() ''' tell: None recieve: ping recieve: ping ask: pong '''