日前因工作需要,整在一点一点熟悉开源跨平台消息中间件: nanomsg ,恰逢最近安装了 Typora 用于练习Markdown语法,那就一并把学习总结整理记录下来并同步更新到方便他人和自己日后回看。
nnpy是其中一个对nanomsg的python wrapper,相比于nanomsg-python日渐缺少维护,更推荐使用nnpy。另外,现在也有了nng(nanomsg next negeration),当nanomsg使用熟练后可考虑转nng。
本文基于Pyhton3.7,当前nnpy的最新版本为 1.4.2 ,依次安装cmake、nanomsg、cffi和nnpy:
这里使用的开发环境为 Jetbrains Pycharm 2019 + WSL ,WSL使用的是Kali-Linux,其他版本如Ubuntu、Debian等也都可以。
我本机装的是Python 3.6,点击右下角当前正在使用的本地解析器名称 Python 3.6 ,选择 Add Interpreter
从左侧选择 WSL 后,右侧面板自动出来当前的WSL发行版本,注意的是这里默认的解析器路径为/usr/bin/python,Kali-Linux默认安装的时候只有python3没有python,需要手动改为 /usr/bin/python3
而后点击 OK 完成WSL Interpreter的添加,在右下角选择 3.7@Kali Linux 即可启用WSL作为远程开发环境——不需要SSH、虚拟机或VPS就能在Windows下进行Linux开发,简直不要太舒服!!
nanomsg提供了如下几种通信模式,太具体的不介绍,说完会用就明白是怎么回事儿了:
PipeLine :
PushPub :
Pair :
ReqRep :
Survey :
Bus :
关于各通信模式的验证请前往本系列后续文章:
PyPy为优化和进一步的语言开发提供了更好的架构。对于大部分Python已有的问题,PyPy已经提供了解决方案:先进的runtime和设计,在此文中作了介绍: The Architecture of Open Source Applications.
速度 - PyPy内置的JIT很棒,有时(其实很少)甚至可以与C相提并论。
GIL问题 - PyPy引入了一个很棒的STM实现,在 Armins Rigo的 文章中对此作了介绍。
粘合代码 - 使用cffi可以简单的处理C库,甚至比CPython的ctypes还要快!
异步编程。这方面,PyPy内置的 greenlet 比CPython的C扩展更适合一些。实际上,非堆栈式的概念(也即greenlet)在PyPy中还在继续发展(参看https://ep2012。europython。eu/conference/talks/the-story-of-stackless-python)
沙盒技术
应用在web和移动中。这里有Dusty的一些文章:Pushing Python Past the Present
PyPy已经支持多平台 (x86, 64_x86, ARM)
PyPy同时还包含了一个优秀的现代的架构,在 Jim Huang 的演讲 中做了介绍,演讲的要点是:
解释性语言的框架
用于研究和产品的组件组合 (不同的数据模型,垃圾回收 - 这些可以在具体的应用场景进行改变)
构建在基于组件链的功能架构之上(翻译工具链)。每一个步骤都会延续/转换程序模型、引入特征、各种后端(JVM, JavaScript, LLVM, GCC IR等等)。来看一下翻译链的例子:python 代码 ->字节码 ->函数对象 ->类型推断 ->垃圾收集器 ->JIT
包含大量在架构的不同层次开发的现代的优化技术 (这个任务可以简化)
相信让所有软件支持PyPy需要付出艰巨的努力 - 需要在现有的库上做很多工作。不过使用新的工具,编写支持PyPy和CPython的软件会比采用C扩展的方式更简单一些(在我们能做什么一节有介绍)。