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 '''