写在一周年
说实话,突然体会到了老祖宗说的『光阴似箭,日月如梭』的感觉了,感觉告白还在昨天,但是转眼就一年了。所以来写篇文章纪念这短短却有很丰富的一年吧 起初说实话,我现在都没搞清楚是她撩的我,还是我撩的她,估计暂时也不会搞清楚了? 在去年的11月7号凌晨,当时聊着双十一,然后她突然说,“要是双十一能脱单就好了”,然后我直接没过大脑的来了一句...
我与 PyCon China 这两年
其实这篇文章最开始动笔是写于9月份,PyCon China 2019 上海场的工作结束后。后续因为还有北京,成都场的工作,所以拖到了现在。正好我自己的三年计划刚刚落下帷幕。下一个三年计划正在开展。我也来聊聊在这三年里面,让我花费精力最多,也是最为重要的部分组成之一吧。 PyCon China,嗯这三年的时间里,我有两年都在与这个熟悉而陌生的名字关联在了一起 我与 PyCon China 的结识说实话,之前 Laike9M 的一句话让我产生了共鸣 Kenneth Reitz 曾经说,他的一年是按 PyCon 计算的。尽管围绕他有很多争议,这句话依然让我有了奇妙的共鸣。对他来说,”PyCon”自然是指 PyCon US,而对我来说,则是 PyCon China 而我18/19年这两年的时间里,有很大一部分时间都在围绕着 PyCon China 要说最早结识 PyCon,应该能追溯到的 2016 年,当时初学 Python 的我,看到 David Beazley 在 PyCon US 2009 上分享的一个名为 A Curious Course on Coroutines...
Linux 上关于 inotify 的小笔记
最近还是无心写啥文章,说好的写几篇关于 Raft 的论文也因为一些事 delay 了。但是想了想还是准备写点什么,于是写个小的水文来记录下关于今天碰到的一个 Linux 内核参数的问题, 顺便做个笔记 开始我是一个不太喜欢 Mac 的人,所以我自己在家使用的开发环境是 Manjaro(这里打个广告,非常棒的发行版,堪称开箱即用,广告五毛一条)。然后代码工具就是 Jetbrains 的全家桶和 VSCode 搭配使用。 今天打开 Goland 的时候,发现 IDE 给了这样一个 Warning ,External file changes sync may be slow: The current inotify(7) watch limit is too low. 于是大家知道,我是个看着这些 warning 有强迫症的人,于是我就去查了查 简单聊聊我们平常经常会有需求,去监控一个文件或者一个目录下的变化,比如创建文件,删除文件等。我们常规的做法可能是一个直接暴力轮询的方式来做 但是这样的性能会极差。那么我们有没有什么手段来处理一下这个事么? 有的! Linux 提供了对应的...
随便聊聊 PEP570
最近沉迷与 MIT 6.824 这门分布式系统的课,无心写文章。不过看到 PEP570 被接受了,决定还是写篇水文随便聊聊 PEP 570 Python 的 argument在聊 PEP570 之前,我们先要来看看 Python 的 argument 变迁 早在 Python 1.0 或更早,Python 的 argument 系统就已经支持我们现在主要使用的两种参数形式了,一种是 positional 一种是 keyword,举几个例子 1234567891011def abc(a, b, c): passabc(1, 2, 3)abc(1, 2, c=3)abc(1, b=2, c=3)abc(*(1, 2, 3))abc(**{"a": 1, "b": 2, "c": 3}) 这是不是我们常见的集中使用方式? 在发展了很长一段时间后,虽然期间有一些提案对 Python 的 argument 系统做优化和增强,但是一直都被 Reject,直到 PEP3102 的出现 3102...
聊聊网络事件中的惊群效应
关于惊群问题,其实我是在去年开始去关注的。然后向 CPython 提了一个关于解决 selector 的惊群问题的补丁 BPO-35517。现在大概来聊聊关于惊群问题那点事吧 惊群问题的过去惊群问题是什么?惊群问题又名惊群效应。简单来说就是多个进程或者线程在等待同一个事件,当事件发生时,所有线程和进程都会被内核唤醒。唤醒后通常只有一个进程获得了该事件并进行处理,其他进程发现获取事件失败后又继续进入了等待状态,在一定程度上降低了系统性能。 可能很多人想问,惊群效应为什么会占用系统资源?降低系统性能? 多进程/线程的唤醒,涉及到的一个问题是上下文切换问题。频繁的上下文切换带来的一个问题是数据将频繁的在寄存器与运行队列中流转。极端情况下,时间更多的消耗在进程/线程的调度上,而不是执行 接下来我们来聊聊我们网络编程中常见的惊群问题。 常见的惊群问题在 Linux 下,我们常见的惊群效应发生于我们使用 accept 以及我们 select 、poll 或 epoll 等系统提供的 API 来处理我们的网络链接。 accept 惊群首先我们用一个流程图来复习下我们传统的 accept...
关于 pyright
关于 pyrightPEP 484,出来也快四年了。正好今天看到一个新库,写个短文,安利下&吐槽下。 关于 PEP 484PEP 484,14年正式提出,15年正式接纳,成为 Python 3.5 以后的标准的一部分。简而言之是通过额外的语法,来为 Python 引入静态类型检查的例子 举个简单例子 1234def return_callback(flag: bool, callback: typing.Callable[[int, int], int])-> int: if not flag: return None return callback(1, 2) 我们通过这样的类型静态标注,来增加可读性以及静态检查的能力。具体内容,可以参看我去年在 BPUG 上的分享的 slide。我最近也会抽出时间,详细聊聊 Type Hint 的前世今生(flag+1) 静态检查静态检查的意义在于,能及时发现低级错误,及时检查,可以很方便的集成进 CI 或者 Git Hook 中 举个简单例子 目前而言,主流的静态检查工具有两种 Python...
2018,我,2019,未来
2018,我,2019,未来本来以为年前没有机会发这篇年终总结以及新年展望。不过目前去向已经确定,所以准备还是写一篇文章纪念下2018这一年,赶在农历戊戌年的末尾发一篇文章出来吧。 2018,我2018...
听说我有女朋友
听说我有女朋友我很喜欢写听说系列文章,从入行开始写的第一篇《听说你会 Python》。所以半年了,我干脆也来写一篇《听说你有女朋友》。为啥要今天写?因为明天她送的新键盘要到了,正好老键盘退役,写点啥纪念下 怎么认识的?很多人都会问我这样的问题:”你一个技术男咋和学音乐的认识了?“,我一般这么回答:”知乎认识的“(请知乎给我广告费,明天之前打到我支付宝上 好了,正经说,我们的确算是在知乎上认识的(广告费+1)。当时我们在一个知乎群里,然后后面加上了好友。 很多时候,我这个人有个毛病,加了女孩子之后不怎么聊的。不过幸好,我们最开始有个共同的爱好,养猫。她家的是一只橘猫。我家是母女两。某种意义上讲,这三只猫是我们俩的媒人(回去加罐头) 正式开始聊起来,应该是开学的时候,她当时睡眠不太好。某天晚上,睡前戏称保佑她肯定睡得好之后。第二天她说昨晚居然还真睡得不错(直男如我我现在都不知道我的功力是不是有那么强。问她她也不说,摔) 借着这个契机,就开始聊了起来,包括不限于互相点外卖犒劳对方上课/上班的无奈。出来约了两次火锅(直男撩妹法) 11月初,当时做完18年的...
去 async/await 之路
去 async/await 之路看到彭总写的文章这破 Python,感慨颇多,我也来灌水吧。 首先,我司算是在国内比较敢于尝试新东西的公司吧,最直接的提现就在于我们会及时跟进社区相关基础服务的迭代,并且敢于去尝试新的东西。嗯,从去年6月到现在,我司在线上推行了很长一段时间的 async/await ,并且引入新的注入 Sanic 这样全新的框架,但是不得不说,我们现在要对 async/await 暂时的说再见了。 我们为什么选用 async/await ?和我们组具体场景有关,我们组有相当一部分场景,是根据不同的 URL 去不同的子服务请求数据,组合之后,再进行下一步的统一处理。那么这个时候,传统的同步的方式在数据源越来越杂的情况下就显得很无奈。 我们当时有这样几个选择: 维护进程/线程池,利用通用的进程/线程来处理请求 利用 Gevent 这样第三方的 coroutine+EventLoop 方案 使用 async/await + asyncio 这一套 首先,1被我们排除了,原因很简单,太重了。2最开始也被我们暂时性的排除,当时我们对于 monkey-patch...
她曾以为自己能逃开教授的手丨人间
她曾以为自己能逃开教授的手丨人间 《不能说的夏天》剧照 ...