Pythonで node.jsの EventEmitter の機能が使えるライブラリ「pyee」の紹介です。
pyeeで出来ること
- node.jsに用意されている ' EventEmitter
' と同等の書き方・使い方ができる
pyeeのインストール
pyee 本体の入手は コマンドライン上から ' pip
' コマンドを使います。なお、インストールされている Pythonのバージョンが ' 2.7
', 3系の場合は ' 3.5以上
' の必要があります。
# pyeeのインストール
pip install pyee
pyeeの使い方
pyee はイベント名を デコレーションで 定義すること以外は、 node.jsの ' EventEmitter
' と同じ要領で使うことができます。また、関数とは違い値を返しません。
- on( eventName ) :イベント名の定義
- emit( eventName ) : イベントの実行
# pyeeモジュールをインポート
from pyee import EventEmitter
# EventEmitterクラスをインスタンス化
ee = EventEmitter()
# イベント名 'greeting' を定義
@ee.on('greeting')
def event_handler():
print('Hello')
# 引数を使う場合
@ee.on('hello')
def event_handler(str):
print("Hello " + str)
####### イベントを実行 ###########
# greetingイベントを実行
ee.emit('greeting')
# output: Hello
# 引数付き
ee.emit('hello', "John")
# output: Hello John
実際に処理を使う場面では イベントを定義するコードを書くことがないので、下のスニペットでクラスにまとめてみました。
from pyee import EventEmitter
class myEvent:
""" pyeeをクラスとして使う例 """
def __init__(self):
pass
def do(self):
# pyee.EventEmitterクラスをインスタンス化
ee = EventEmitter()
@ee.on('greetEvent')
def greeting_event():
print('Hello !!')
@ee.on('helloEvent')
def greeting_event_with_name(str):
print('Hello ' + str + ' !!')
@ee.on('multiArgEvent')
def arg(*argument):
print(argument[0])
print(argument[1])
# EventEmitterクラスを返す
return ee
###################
# myEventクラスをインスタンス化
event = myEvent()
# greetEventを実行
event.do().emit('greetEvent')
# output : Hello!
# helloEventを実行
event.do().emit('helloEvent', "Jhon")
# output: Hello Jhon !!
# multiArgEventを実行
event.do().emit('multiArgEvent', 'abc', 'def')
# output :
# abc
# def
Summary
以上が pyee の紹介でした。sessionへの書き込み部分や、slackのラッパーライブラリ等と組み合わせたり等、値を返さないイベント機能なので使うと 綺麗に処理がまとめられそうです。
GitHub : jfhbrook/pyee