玩转pyuv(译)

非逐句译,同时译者wooce添加了其他一些内容。

 

引言

    服务端的Javascript:  node.js近期人气急升。

    node.js的作者做的网络封装库libuv ,   提供了跟libev同样的核心功能,并有些真的不错的libuv独有的好处:

 

  • Windows平台上的高性能IO
  • 异步文件操作
  • 内置的线程池
  • 异步的getaddrinfo
  • 更优雅的使用API。

      等等。

    我寻找libuv的python封装,找到了pyuv:  https://github.com/saghul/pyuv 

 

安装
     不能用Pypi来安装。需要用git下载源码后安装:

 

$ git clone https://github.com/saghul/pyuv.git
$ python setup.py build
$ sudo python setup.py install

示例
    以TCP Echo Server为例,  参见 https://github.com/saghul/pyuv/blob/master/examples/echo-server-tcp.py 的代码:
import os
import signal
import threading
import pyuv

def on_client_shutdown(client):
    client.close()
    clients.remove(client)

def on_read(client, data):
    if data is None:
        client.close()
        clients.remove(client)
        return
    data = data.strip()
    if not data:
        return
    client.write(data+os.linesep)
    client.shutdown(on_client_shutdown)

def on_connection(server):
    client = server.accept()
    clients.append(client)
    client.start_read(on_read)

def async_exit(async):
    [c.close() for c in clients]
    async.close()
    signal_h.close()
    server.close()

def signal_cb(sig, frame):
    async.send(async_exit)


print "PyUV version %s" % pyuv.__version__

loop = pyuv.Loop()

async = pyuv.Async(loop)
clients = []

server = pyuv.TCP(loop)
server.bind(("0.0.0.0", 5000))
server.listen(on_connection)

signal_h = pyuv.Signal(loop)
signal_h.start()

t = threading.Thread(target=loop.run)
t.start()

signal.signal(signal.SIGINT, signal_cb)
signal.pause()

t.join()

print "Stopped!"

性能测试
  该Echo Server示例和其他语言及架构实现的Echo server(参考 https://github.com/methane/echoserver)的性能测试的结果对比。
   


   测试的详细报告在 这里。 
   pyuv的测试结果跟tornado相比的话稍有些慢。pyuv的设计和tornado相似。

参考

joyent/libuv ? GitHub

 

结论

    通过pyuv,可以很容易地在python中使用libuv,而且非常有趣.

    译者wooce注:uevent 是一个在gevent中把libuv作为网络核心的实现,它就是基于pyuv之上的,不过它还是个试验性的project,  主要功能是可用的,但尚未通过所有测试,由于gevent跟libev现在的紧密集成,换成libuv在实现上有所阻碍。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值