重要提示,本文只会提供关键名词,不会涉及太多技术细节,技术细节自己去深挖吧。
在 Python 中加快文件传输和文件复制 - Giampaolo Rodola
第一位上台的是来自意大利的 Giampaolo Rodola,一位 Python 核心开发者,本来想上去尬聊的,但限于自己的英语水平,就作罢了,在这场会议上并不是每个单词都懂,但就是大致知道他在分享什么。
他的分享分为两大块。
第一部分讲了 Python3.8 中拷贝的底层使用了 os.sendfile () 或 socket.sendfile () 方法实现文件的拷贝,相比于旧的拷贝方式,这种方式会更快。
操作系统分为用户态与内核态,旧的复制文件方式会多次在用户态与内核态之间切换执行,而 os.sendfile () 会在内核态完成所有的操作,所以更快。
第二部分主要介绍了 psutil,通过 psutil 可以实现对计算机大部分状态的监控,如 cpu、内存、磁盘、进程、网络等各种状态,利用 psutil 其实就可以构建出一个计算机状态监控器了。
Google SRE 体系核心基础解读 —— 刘征
第二位上台的是刘征老师 (Elastic 的广告),主要讲了 Google 的 SRE (网站可靠性工程),SRE 主要有 3 个东西,分别是 SLA、SLO、SLI,在边听会议的时候,简单查了一下,个人感觉,这种东西更偏向于一种工作方式,感兴趣的可以搜索了解一下
从 Python 开始钱赚钱 —— 邝泽徽
邝泽徽老师主要分享他个人的业余项目,如何利用 Python 抄虚拟货币赚钱,对于做过一段时间量化的我来说,这个分享没有特别强的逻辑支持,主要使用网格策略,这种策略理论上在大波动的市场中会有比较好的效果,而虚拟货币就是一个大波动的市场,网格策略的核心逻辑就是利用波动做买入与卖出,下跌时买入,上涨是卖出,做到多次下跌买入时的平均价格小于多次上涨卖出的平均价格减去交易手续费的平均价格则可。
这位老师分享的项目比较随意,感觉有一些点是逻辑非自洽的,但这个分享的关键其实并不是项目本身,而是知行合一的理念,知行合一出自王阳明的阳明心学,王阳明受挫后在龙场悟道,提出了知行合一这种心学。(王阳明的书籍值得一看,我被之前棋盘公司技术经理拉坑看完了)。
一行代码加速科学计算 —— 解超
解超老师是位年轻人,声音洪亮的分享了 Modin 这个库,它可以通过一行代码加速 pandas,怎么个一行法?
import pandas as pd
改为
import modin.pandas as pd
Modin 以及实现了 70% 的 Pandas API,使用方式与 Pandas 完全相同。
Pandas 之所以慢,是因为 Pandas 只能使用 CPU 的单核,Pandas 不是 C 实现的吗?没错,但人家没有实现支持多核使用的逻辑,Modin 的主要改进就是可以利用设备中所有的 CPU 资源,从而实现速度上的极大提升。
但 Modin 的社区是否完善?社区不完善遇到坑可是非常非常痛苦的。
感兴趣的可以看一下,Modin 项目仓库地址:
https://github.com/modin-project/modin
数字货币交易系统架构和 Python 实现 —— 黄毅
黄毅老师功力深厚,会议结束后,我特意找他尬聊了一会,因为没有深入研究过 Redis,所以很多东西都是知识范围外的。
黄毅老师分享了自己构建的数字货币交易系统的架构,与传统 Web 系统架构不同的是,交易系统撮合的功能必须在全局顺序执行,所谓撮合就是找到卖方的最低价与买方最高价,让双方进行交易。
这就需要找到整个系统中的买方,然后找到整个系统的卖方,然后按顺序进行交易,这部分是无法实现并发的,即没办法多笔交易同时进行,因为每一笔交易都会影响到下一笔交易。
这让系统存在理论上的承载上限,无法以增加机器构建集群的方式来扩展系统。(我非常好奇 A 股交易系统、美股交易系统是怎么解决这问题的?)
黄毅老师的解决方式是使用 Redis Module 实现新的 Redis 数据类型,来满足业务逻辑,让业务逻辑全部在内存中完成。当然,数据会持久化的记录于关系型数据库中 (Ticks:拼接成批量操作的 SQL,增加插入数据速度)。
交易系统依托于 Redis Module 与 Redis Stream (Redis 5.0 以上才支持,类似与 Kafka),可以实现单核每秒十万笔交易的程度 (大喊 666)。
大佬分享了他们的流计算开源作品:https://github.com/cryptorelay/redis-aggregation
他们公司 Crypto 还有招聘,薪资不是一般的高,Python 开发:50k-100k (经验:5-10 年)。
Python 的人工智能开发在微软云中的应用 —— 卢建晖
卢建晖老师 - 微软最有价值专家
可能是老师深藏不漏,我没有 Get 到演讲的神韵,虽然分享题目是人工智能这块的内容,而且大部分介绍 Azure,即广告。
因为我做过一段时间的 NLP,大致知道情况,深度学习目前对个人玩家并不友好,目前知名模型训练需要耗费巨大的算力,算力等于钱,需要上集群,这种云上免费训练,只能做一些简单模型。
当然我们可以利用迁移学习来使用他人已经训练好的模型,但这与分享的东西就没啥联系了。
此外,一个比较有意思的就是 VS Code 支持了 Jupyter 插件,可以直接在 VS Code 中使用 Jupyter,而且更加智能方便。
VS Code 使用 Electron 开发,本身又开源,其代码很值得学习,推荐一个来自淘宝前端大佬的博客,他此前一段时间的工作就是魔改 VS Code,形成淘宝自己的开发工具,名为 Editor,其博客如下:
https://www.barretlee.com/blog/2019/08/03/vscode-source-code-reading-notes/
FPGA 助力 Python 加速计算 —— 陈志勇
陈志勇老师主要分享了 FPGA 这种可以半定制的电路,利用 FPGA + 编程可以实现一些有趣的效果。
一开始主要介绍 FPGA 硬件上的知识,硬件上的并行就是利用多个电子元件实现的,而单个电子元件只能实现并发的效果。
此外还提了函数式编程语言,陈志勇老师说在硬件上编写程序一定要有函数式编程思维,因为我只用过 Erlang 这一种函数式编程语言做游戏开发,所以并不太理解这句话。
这个分享唯一与 Python 相关的地方就是 PYNQ 库,利用 PYNQ 的 API 可以编写在该公司硬件上使用的程序,运行速度很快,原因在于 PYNQ 会将相应的 Python 语言映射为硬件设备上 RTL 代码,从而实现极快的运算速度。
除了可以使用 Python 编写外,还可以使用 C 来编写,利用 Vivado HLS 这个工具,可以将 C 语言转为 RTL 代码,转换的过程应该是利用了编译原理相关的知识,但转换效果没有利用 PYNQ 这种映射成 RTL 的方式好,原因在于编写的 C 语言没有使用硬件开发的思路来写代码,此时转为的 RTL 代码其实写的不好,导致效率不高,而 PYNQ 这种方式,以丧失灵活性的方式来实现映射后 RTL 代码的规范性。
其实很多工具代码转换的方式都会有各种各样的问题,如 Unity 开发游戏转为 H5,H5 确实可以运行,但卡的不行,手机上完全不能玩,此外 Debug 等各种问题也是坑。
Pipenv 和 Python 包管理 —— 明希
明希老师主要分享了 Python 虚拟环境以及包管理的一些内容,内容很细,一开始主要分享了安装包的正确方法以及各种各样的坑。
随后介绍了 Pipenv,简单说了依赖解析问题与相应的解决方法。
最后说了一下为了 Python 包管理未来可能出现的方式,涉及了 PEP517、PEP518 草案,说的其实就是 Node.js 利用 npm 管理包那套,像 npm 那样,你可以选择将依赖库安装全局也可以安装到当前项目的目录下,安装在当前项目目录,只会被当前项目使用,利用这种方式就不用理会虚拟环境的问题了。
然后介绍了 PyFlow 这一个工具,可以实现 PEP517、PEP518 草案的效果,地址为:
https://github.com/David-OConnor/pyflow
但 npm 本身也有各种问题,在 2019 的 JSconfEU 上提出了 Tink 下一代包管理器技术,意在取代 npm。
闪电演讲
每个演讲大概 10 分钟
Python C 拓展在各平台的打包与发布 —— 赵丰
赵丰老师介绍了在 CI (Continuous Integration,持续集成) 环境自动打包 Python C 拓展库的方法。
构建 Python C 拓展包与构建纯 Python 包不同,需要涉及到编译的流程。在 Linux 中,随便编译的 C 拓展库是无法上传到官方的,这里 Python 官方给出了一个 centos6.1 环境的 Docker,必须在这个 Docker 的 Linux 下打的包才能上传。
为 Python Function 自动生成 Web UI —— 彭未康
彭未康老师介绍了自己开发的工具 Touch-Callable,构建于 Flask 之上,可以快速的通过一个方法构建出一个 web 界面,方便测试人员使用,比较简单,效果如下:
# examply.py
from enum import Enum
class 开关(Enum):
开 = '开'
关 = '关'
def 饮水机(口令: str, 制热: 开关=None, 制冷: 开关=开关('开')):
"""这是 20618 的!"""
if 口令 != '多喝热水':
raise ValueError('你是谁,我不认识你')
# 省略具体逻辑
github:https://github.com/pengwk/touch-callable
数字货币交易系统 Python 实践 —— 代少飞
介绍了开发交易系统时会遇到的问题以及给出的解决方法,这些解决方法出乎意料的朴素简单,并没有涉及什么高深技术。
此外还介绍了 APScheduler 这一个定时任务库 (因为他们的系统中使用了),这个库有比较多的概念,有兴趣可以看一下:
https://github.com/agronholm/apscheduler
但如果只是单纯的定时任务,其实并不建议使用 apscheduler,它会增大系统的复杂度,直接使用 crontab 简单粗暴。
Django 实现后端低代码开发平台 —— Jeff
low-code (低代码),简单而言就是通过不写或少写代码的方式来构建一个系统,jeff 老师将其分为 3 个阶段,第一个就是像 Django Admin 那样,写少量代码,实现 web 功能,第二个阶段就是通过配置文件来构建 web 系统,例如通过 JSON 文件构建一个 web 系统,第三个阶段,就是通过界面配置来构建一个 web 系统。
但我个人觉得,第三阶段应该是以可拖动式的方式来构建一个 web 系统。因为通过界面配置其实本质依旧是生成一个 JSON 文件,如果逻辑要变动,还是需要手写逻辑,不够灵活,而目前我知道的商用 low-code 平台是利用类似逻辑图的结构来构建无代码构建 web 平台的目的 (很多量化平台其实也有类似的东西,如 bigquant)。
通过界面拖动的方式,会更加灵活,可以自己构建各种逻辑,但操作复杂度也变大,很多时候构建一个 web,如构建后台,通过配置来构建更佳,因为大多数时候都是增删改查,没有什么特别的逻辑。
尾
这其实是我第一次参加这种会议,因为此前自己粗浅的认为,会议没有什么意义,一天能学什么?所以都没有怎么参加,但这次参加感觉很不错,认识了几位新朋友,开阔了一下眼界,这就是会议的意义。
最后,感谢你的阅读,如果内容对你有点帮助,麻烦点一下「好看」,那是可以点击的,谢谢。