読者です 読者をやめる 読者になる 読者になる

gevent 使ってみた

gevent: A coroutine-based network library for Python - http://www.gevent.org/

知らない人はあんまりいないと思うので、説明は割愛。

erlang:spawn(module, fun, args) みたいに gevent.spawn(fun, *args, **kargs) って出来るんですね、これは良いものですね。

gevent.select と gevent.socket を使ってみました。gevent.select は epoll とか kqueue にうまいこと置き換えてくれる感じかな。

gevent.monkey がオモシロですね、既存の socket や select を置き換えてくれるみたいです。これはイイ:-)

import gevent
import gevent.socket
import gevent.select

def echo(socket, address, binary):
  socket.sendto(binary, address)

def main():
  socket = gevent.socket.socket(type = gevent.socket.SOCK_DGRAM)
  socket.bind(("", 1812))

  while True:
    # result.read, result.write, []
    r, w, e = gevent.select.select([socket], [], [])
    for sock in r:
      (binary, address) = sock.recvfrom(4096)
      gevent.spawn(echo, socket, address, binary)

if __name__ == '__main__':
  main()