Tag Archives: Python

Python 的 asyncio 网络性能比 C 写的 Redis 还好?

先前我做过一个 asyncio/gevent 的性能比较《性能测试:asyncio vs gevent vs native epoll》,今天修改了一下 asyncio 的测试程序的消息解析部分,改用 Protocol,发现它甚至比 redis 还快了: 安装依赖: pip install hiredis uvloop 编辑 echosvr.py 文件:

Loading

Posted in 网络编程 | Tagged | Leave a comment

性能测试:asyncio vs gevent vs native epoll

测试一下 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): # … Continue reading

Loading

Posted in 编程技术 | Tagged | 1 Comment

怎么样打包 pyqt 应用才是最佳方案?

早先看一堆人说 PyQt 打包麻烦,部署困难的,打出来的包大(几十兆起步),而且启动贼慢,其实 Python+PyQt 打包非常容易,根本不需要用什么 PyInstaller,我手工打包出来的纯 Python 环境只有 5MB,加上 PyQt 也才 14MB。 很多人用 PyInstaller 喜欢加一个 -F 参数,打包成一个单文件: 这样的单文件看起来似乎很爽,其实他们不知道,这其实是一个自解压程序,每次运行时需要把自己解压到 temp 目录,然后再去用实际的方式运行一遍解压出来的东西: Process Explorer 把雷达图标拖动到 pyqt_hello.exe 的窗口上,可以看到有两个 pyqt_hello.exe 的文件,外面那个是你打包出来的,里面那个才是真正的程序(虽然可执行都是一个),看看它下面依赖的 python310.dll 是在哪里?这不就是一个临时解压出来的目录么: 看到没?这就是你 PyInstaller 打包出来的 30MB 的程序,每次运行都要临时解压出 71MB 的文件,运行完又删除了,那么如果打包出来的可执行有 100MB,每次运行都要释放出 200-300 MB 的东西出来,所以为什么 … Continue reading

Loading

Posted in 编程技术 | Tagged , | 1 Comment

桌面开发用 Tkinter/wxPython/PyQt 哪个好?

Python 有很多 GUI 框架,比如著名的 Tkinter,wxPython 和 PyQt,那么想用 Python 开发桌面软件的话选哪个更好呢?作为三个都用过的人先给个结论,不用纠结,直接选 PyQt 即可。 很多人说 Tkinter 简单无依赖,没错,但这就是 tkinter 唯一的仅存的优点了,但是请大家注意,Tkinter 的这个 “简单”,是指 “功能少和效果单一”,不是写程序简单明了,真正写起程序来还是 PyQt 最简单清晰。 有些东西你学出来就过时了,比如 “算盘”,比如 Tkinter 和 wxPython;而有的东西你学会了,即便不吃这碗饭,不靠它涨工资,也能在今后一二十年持续受益,比如练习打字速度,比如背单词,比如学习 PyQt。 对于桌面开发,天下武功那么多,PyQt 既是最正统的门派,同时又是一系列综合技术的组合,它近可以同 C++ Qt 无缝整合,解决性能相关的东西;退,又有基于 chromium 的 QtWebEngine ,能在适合跑页面的部分用 html/js 来写页面,并和 python 双向调用,实现类似 … Continue reading

Loading

Posted in 编程技术 | Tagged , | Leave a comment

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

周末读了一下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脚本

Loading

Posted in 编程技术 | Tagged | Leave a comment

Python少打字小技巧

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

Loading

Posted in 编程技术 | Tagged | 1 Comment