Archive

Posts Tagged ‘Python’

性能测试:asyncio vs gevent vs native epoll

December 22nd, 2022 No comments

测试一下 python 的 asyncio 和 gevent 的性能,再和同等 C 程序对比一下,先安装依赖:

pip3 install hiredis gevent

如果是 Linux 的话,可以选择安装 uvloop 的包,可以测试加速 asyncio 的效果。

测试程序:echo_bench_gevent.py

import sys
import gevent
import gevent.monkey
import hiredis

from gevent.server import StreamServer
gevent.monkey.patch_all()

d = {}

def process(req):
    # only support get/set
    cmd = req[0].lower()
    if cmd == b'set':
        d[req[1]] = req[2]
        return b"+OK\r\n"
    elif cmd == b'get':
        v = d.get(req[1])
        if v is None:
            return b'$-1\r\n'
        else:
            return b'$1\r\n1\r\n'
    else:
        print(cmd)
        raise NotImplementedError()
    return b''

def handle(sock, addr):
    reader = hiredis.Reader()
    while True:
        buf = sock.recv(4096)
        if not buf:
            return
        reader.feed(buf)
        while True:
            req = reader.gets()
            if not req:
                break
            sock.sendall(process(req))
    return 0

print('serving on 0.0.0.0:5000')
server = StreamServer(('0.0.0.0', 5000), handle)
server.serve_forever()

测试程序:echo_bench_asyncio.py

(点击 Read more 展开)

Read more…

Categories: 编程技术 Tags:

PY2EXE的启动步奏参考-科学的发布

October 13th, 2006 No comments

周末读了一下Py2Exe的代码,偶然发现Py2Exe的实现,是一套很成熟的客户端发布方式,不限于只有

Python项目可以参考,Py2exe启动步奏如下:

Py2exe启动步奏方式参考:

1.       主程序启动,尝试在本EXE的资源中找到zip过后的PythonXX.dll的数据
2.       如果找到 PythonXX.dll数据则unzip后以memory dll方式加载并导出接口
3.       初始化 memoryimporter,给python提供在内存中import一个pyc或者dll的功能
4.       利用memoryimporter加载_ctypes.pyd模块
5.       利用py2exe_util.c中的方法,加载程序所需要的资源:ICON等
6.       在资源中初始化 zlib.pyd等必要模块
7.       在资源中找到初始化,以”__main__”的命名开始转入Python脚本

Categories: 编程技术 Tags:

Python少打字小技巧

June 7th, 2006 1 comment

说明:增加代码的描述力,可以成倍减少你的LOC,做到简单,并且真切有力
观点:少打字=多思考+少出错,10代码行比50行更能让人明白,以下技巧有助于提高5倍工作效率

Read more…

Categories: 编程技术 Tags:
Wordpress Social Share Plugin powered by Ultimatelysocial