《Asynchronous Programming in Python》读后感

一、 为什么读这本书?

最近在梳理并发编程,所以想了解一些异步开发, asyncio 的用法,《Asynchronous Programming in Python》是 2025 年出版,比较新,所以选择阅读这本书。

二、这本书写了什么?

总体而言,这本书什么都谈一点。基础概念:进程(process)、线程(thread) ,纤程(fiber),协程(coroutine),生成器。异步库:asyncio, trio。性能分析(scalene),测试(pytest-asyncio), 设计模式(monitor object patter, leader/follower patter),框架(Django, Flask, Quart),数据库操作(sqlite3, aiosqlite)等等,在此就不一 一罗列了。

三、本书评价

本书总计 171 页,从 2025 年 12 月 29 日至 2026 年 1 月 20 日,期间断断续续花了 22 天阅读完《Grokking Concurrency》。

总体而言,本书问题较多,例如:

1.罗列内容,缺乏深度。

这本书只有171页,但是却谈了很多很多的技术概念、库(框架),相当于把各种库的基本用法汇总上去就完了,如果让我给这本书起一个中文名,我觉得应该叫做《Python异步编程概览》,都达不到入门的程度。看完了也只是在头脑中有一个印象而已,对实际工程项目没有任何帮助。

2.代码写法随意,风格不统一。

# p55, 不用 f-string:
print("Queue size:",curr_len)
# p56, 用 f-string:
f = open(f'./tmp/${item["id"]}.json', "a")

虽说怎么写都行,但是代码保持统一风格,有利于代码阅读、维护。

3.存在多处代码错误

# p55 
async def fetcher():
    while True:
        msg = await sse_client_get_values()
        try:
            for item in msg:
                vals.put(item)
        except queue.Full:
            print("Queue full")
            return True
        await asyncio.sleep(1)

这里没有指定 timeout, 并不会触发 queue.Full 异常。当然,错误远不止这一处。

4.表述不严谨

p69, "This blocking operation is easily solved by relying on one of the most used asynchronous HTTP clients, aiohttp, which provides a non-blocking HTTP connection pooling mechanism to reuse a connection to a server.", aiohttp 是 "Asynchronous HTTP Client/Server for asyncio and Python."。aiohttp 既可以做 Client, 也可以做 Server, 而不只是 Client,这样写容易让人误解。
p71, 测试代码的模块命名为 test1.py,这在实际的开发中是万万不行的,同时也没有指出在实际开发中,测试代码的组织结构。
p91, "Several Python frameworks became popular way before asynchronous programming mechanisms had become incorporated into Python’s core APIs. "。这里用 Python’s core APIs 这个概念, 其实大部分人看到这个概念根本不知道指的是什么。

本来阅读是为了解决一些问题,但是如果阅读这本书,问题会更多,因为如果你是很认真的看,你就需要花大量的时间去梳理作者说的某个概念具体指的是什么,作者说的到底对不对。

回到为什么读这本书——“了解一些异步开发, asyncio 的用法”,这本书没有解决我的问题,因为介绍的非常浅,仅仅写个 demo 而已,根本无法在生产环境使用。

四、阅读方法

基于本人秉持的观点“虽然每个作者的写作水平不一样,但我们要做一个高水平的读者,要根据作者的写作水平,调整自己的阅读方法”,本人阅读此书的方法如下:

1..直接下载源码,然后在源码里面创建目录写自己的代码。之前自己都是新建一个项目写代码,然后在自己的项目和书中的项目来回切换,太麻烦了。

2.作者很多描述是不准确的,不必纠结于作者给出的概念,先往下读。

3.对于不熟悉的技术,如:异步编程的语法,包。先熟悉,再自己写,不然就会遇到各种问题。虽然先自己写,然后再和作者的代码对比也是一种方式,但是更慢。

五、这本书适合什么样的人?

介于作者泛泛而谈,东一榔头,西一棒子,距离工程应用相距十万八千里,本书只适合想大概浏览一下 Python 异步编程相关库的人。

六、阅读指数

按照 5 星标准,本书阅读指数 1 颗星(★☆☆☆☆)。

七、参考资料

1. 编程

(1)豆瓣,Nicolas Bohorquez,《Asynchronous Programming in Python》:https://book.douban.com/subject/38207055/

(2)Github,源码:https://github.com/PacktPublishing/Asynchronous-Programming-in-Python

2. 英语

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

codists_qr

欢迎搜索及关注:编程人(a_codists)

posted @ 2026-01-23 11:30  codists  阅读(7)  评论(0)    收藏  举报