node.jsのEventEmitterをPythonで実現出来るライブラリ「pyee」



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

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ



その他の運営サービス

最新の記事