猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

Eventletの使い方(サーバ版)

 前回はクライアント版のプログラムで並列化されているのを確認したので、今度はサーバ側のプログラムを作成してみます。

サーバプログラム

 import eventlet

def handle(clientSock, clientAddr):
    data = clientSock.recv(1024).strip()
    clientSock.sendall(data)
    return


if __name__ == "__main__":
        HOST, PORT = "localhost", 8080

        sock = eventlet.listen(('0.0.0.0', 6000))
        eventlet.serve(sock, handle)                                

 前作成したTCPのサーバのプログラムとほぼ同じです。グリーンスレッドの処理などは全て抽象化されているため隠蔽されてしまい、ユーザがそれらを意識する必要はありません。

eventlet.serveとeventlet.spawnの違い

 どちらも、グリーンスレッドを用いてリクエストに対する処理を行えます。ここによるとserveの方は引数としてhandleを使いますが、spawnの方は任意の関数と引数を使用できるようです。