ARTS——week 3
上周任务太多,加上 review 的文章篇幅太长,耽误了时间,本周会连续发布两篇文章补上
Algorithm
题目链接
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
题目分析
依次在左右两个子树中寻找对应节点 p, q,如果 p, q 两个节点分别位于左右子树之间,则当前节点是目标节点;退出条件是,找到其中一个节点或者为空,即当前子树不包含 p, q 任意节点, 必然在另一个子树上
代码实现
Review
python Async IO 介绍https://realpython.com/async-io-python/. 本文作者为 Brad Solomon, 介绍了 python 协程机制,异步 IO 的用法,整篇文章结构清晰,示例代码都是考下来直接跑的通,非常好的介绍了 python 3.7 以上版本的协程用法。唯一的缺点就是太长,当我读完这篇文章,甚至忘记了当时要用协程来
协程解决什么问题?
协程也是支持并发任务的一种方法,但是是一单线程的方式进行。对于密集 IO 任务,多线程的线程切换成本太高,导致扩展性差,协程的出现成为很好的替代品。"Nginx 是支持异步 IO 的服务器,在单核 CPU 上采用单进程模型可以高效支持多任务"--廖雪峰。
协程可以和多进程一起使用,最大化效率。
Aysnc IO 使用方法?
在 python 3.7 中,引入 async, await 两个关键字,async 定义异步函数,await 在等待 async 函数执行的时候,可以让 CPU 执行其他任务,等该任务完成后继续执行后续代码,从而形成了很好的中断机制,完成异步 IO 任务。
注意:await 的函数必须是定义为 async 的。
可以将多个 async 函数串联起来,提高执行效率。
asycio 也提供 Queue 进行控制,可以作为生产者/消费者模型使用;相比同步多线程版本,能够减少阻塞;
Tips
python 内存分析方法实现, 上周介绍了逐行分析时间的方法,line_profiler, kernprof 工具,本周介绍一个内存分析工具, memory_profiler. 安装方法
使用方法,对要分析的函数加 @profile, 然后运行
注意:memory_profiler 的耗时非常久,所以一定要定位好要分析的函数,建议先用 line_profiler 定位行,基本定位了要分析的函数,再进行 memory 分析。
Share
本周分享的观点是:文档是给未来自己留下的最大的宝藏。文档是给未来自己的珍贵礼物 - InfoQ 写作平台。文档不但是宣传工具,也是生产力工具。
版权声明: 本文为 InfoQ 作者【steve_lee】的原创文章。
原文链接:【http://xie.infoq.cn/article/dcb80ebf85dbb8a84e79edfb6】。文章转载请联系作者。
评论