PyConChina 2019 深圳之行

519 阅读11分钟

重要提示,本文只会提供关键名词,不会涉及太多技术细节,技术细节自己去深挖吧。

在 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 项目仓库地址:

github.com/modin-proje…

数字货币交易系统架构和 Python 实现 —— 黄毅

黄毅老师功力深厚,会议结束后,我特意找他尬聊了一会,因为没有深入研究过Redis,所以很多东西都是知识范围外的。

黄毅老师分享了自己构建的数字货币交易系统的架构,与传统Web系统架构不同的是,交易系统撮合的功能必须在全局顺序执行,所谓撮合就是找到卖方的最低价与买方最高价,让双方进行交易。

这就需要找到整个系统中的买方,然后找到整个系统的卖方,然后按顺序进行交易,这部分是无法实现并发的,即没办法多笔交易同时进行,因为每一笔交易都会影响到下一笔交易。

这让系统存在理论上的承载上限,无法以增加机器构建集群的方式来扩展系统。(我非常好奇A股交易系统、美股交易系统是怎么解决这问题的?)

黄毅老师的解决方式是使用Redis Module实现新的Redis数据类型,来满足业务逻辑,让业务逻辑全部在内存中完成。当然,数据会持久化的记录于关系型数据库中(Ticks:拼接成批量操作的SQL,增加插入数据速度)。

交易系统依托于Redis Module与Redis Stream(Redis 5.0以上才支持,类似与Kafka),可以实现单核每秒十万笔交易的程度(大喊666)。

大佬分享了他们的流计算开源作品:github.com/cryptorelay…

他们公司 Crypto 还有招聘,薪资不是一般的高,Python开发:50k-100k(经验:5-10年)。

Python 的人工智能开发在微软云中的应用 —— 卢建晖

卢建晖老师-微软最有价值专家

可能是老师深藏不漏,我没有Get到演讲的神韵,虽然分享题目是人工智能这块的内容,而且大部分介绍Azure,即广告。

因为我做过一段时间的NLP,大致知道情况,深度学习目前对个人玩家并不友好,目前知名模型训练需要耗费巨大的算力,算力等于钱,需要上集群,这种云上免费训练,只能做一些简单模型。

当然我们可以利用迁移学习来使用他人已经训练好的模型,但这与分享的东西就没啥联系了。

此外,一个比较有意思的就是VS Code支持了Jupyter插件,可以直接在VS Code中使用Jupyter,而且更加智能方便。

VS Code使用Electron开发,本身又开源,其代码很值得学习,推荐一个来自淘宝前端大佬的博客,他此前一段时间的工作就是魔改VS Code,形成淘宝自己的开发工具,名为Editor,其博客如下:

www.barretlee.com/blog/2019/0…

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草案的效果,地址为:

github.com/David-OConn…

但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:github.com/pengwk/touc…

数字货币交易系统 Python 实践 —— 代少飞

介绍了开发交易系统时会遇到的问题以及给出的解决方法,这些解决方法出乎意料的朴素简单,并没有涉及什么高深技术。

此外还介绍了APScheduler这一个定时任务库(因为他们的系统中使用了),这个库有比较多的概念,有兴趣可以看一下:

github.com/agronholm/a…

但如果只是单纯的定时任务,其实并不建议使用apscheduler,它会增大系统的复杂度,直接使用crontab简单粗暴。

Django 实现后端低代码开发平台 —— Jeff

low-code(低代码),简单而言就是通过不写或少写代码的方式来构建一个系统,jeff老师将其分为3个阶段,第一个就是像 Django Admin那样,写少量代码,实现web功能,第二个阶段就是通过配置文件来构建web系统,例如通过JSON文件构建一个web系统,第三个阶段,就是通过界面配置来构建一个web系统。

但我个人觉得,第三阶段应该是以可拖动式的方式来构建一个web系统。因为通过界面配置其实本质依旧是生成一个JSON文件,如果逻辑要变动,还是需要手写逻辑,不够灵活,而目前我知道的商用low-code平台是利用类似逻辑图的结构来构建无代码构建web平台的目的(很多量化平台其实也有类似的东西,如bigquant)。

通过界面拖动的方式,会更加灵活,可以自己构建各种逻辑,但操作复杂度也变大,很多时候构建一个web,如构建后台,通过配置来构建更佳,因为大多数时候都是增删改查,没有什么特别的逻辑。

这其实是我第一次参数这种会议,因为此前自己粗浅的认为,会议没有什么意义,一天能学什么?所以都没有怎么参加,但这次参加感觉很不错,认识了几位新朋友,开阔了一下眼界,这就是会议的意义。

最后,感谢你的阅读,如果内容对你有点帮助,麻烦点一下「好看」,那是可以点击的,谢谢。