#949 人民币汇率历史走势
经济 2023-08-24
coding in a complicated world

相信做 Python 的都知道 Python 有一个内置的 HTTP Server,可能经常临时性使用一下。
今天,我在 https://til.simonwillison.net/python/stdlib-cli-tools 上了解到 Python 其实内置了不少小工具,可以了解一下,说不定可以用到。
阮一峰博客上看到这么一个数学题(原文是 maths.org 2014 年的一篇文章):
已知:小圆的半径为 $r$,大圆的半径为 $4r$
问:小圆自身滚动了几周?


我们生活在这样一个社会:小孩子像成年人一样老成,而成年人像小孩子一样幼稚。
现在的孩子们比以前更容易接触到成年人的世界,因此他们更早成人化。
从很小的年龄起,他们就在视频网站观看暴力和战争,在社交网络上看到性感和暴露的照片和视频。
然而,当孩子们成年以后,他们往往无法实现经济独立,也没有机会承担足够的责任。
结果,整个社会的文化就变得很幼稚,成年人感到无法做出承诺,即使承诺了也缺乏信心,对以后的生活感到难以把握。
他们的行事方式和处事态度,就像还在青少年时期。
mime-type:image/png larger-than:1K
# Edge 官方示例,表示过滤出大于 1K 的 PNG 图片
domain:*.csdn.net method:POST
# 过滤出 CSDN 域的 POST 请求。
has-response-header:Content-Type -domain:*.baidu.com
# 过滤出带 Content-Type 头的请求,排除百度域。
| 属性 | 详情 |
|---|---|
domain |
仅显示来自指定域的资源。您可以使用通配符(*)来包含多个域。例如, *.com 会显示所有以 .com 结尾的域名资源。DevTools 会将所有找到的域名填充到自动完成下拉菜单中。 |
has-response-header |
显示包含指定 HTTP 响应头的资源。 DevTools 会将所有找到的响应头填充到自动完成下拉菜单中。 |
is |
使用 is:running 查找 WebSocket 资源。 |
larger-than |
显示大于指定大小的资源,单位为字节。 设置值为 1000 相当于设置值为 1k。 |
method |
显示通过指定的 HTTP 方法类型检索的资源。 DevTools 会将所有找到的 HTTP 方法填充到下拉菜单中。 |
mime-type |
显示指定 MIME 类型的资源。 DevTools 会将所有找到的 MIME 类型填充到下拉菜单中。 |
mixed-content |
显示所有混合内容资源(mixed-content:all),或仅显示当前显示的资源(mixed-content:displayed)。 |
scheme |
显示通过不安全的 HTTP(scheme:http)或安全的 HTTPS(scheme:https)检索的资源。 |
set-cookie-domain |
显示具有与指定值匹配的 Set-Cookie 标头中的 Domain 属性的资源。DevTools 会将所有找到的 Cookie 域填充到自动完成中。 |
set-cookie-name |
显示具有与指定值匹配的 Set-Cookie 标头中的名称的资源。DevTools 会将所有找到的 Cookie 名称填充到自动完成中。 |
set-cookie-value |
显示具有与指定值匹配的 Set-Cookie 标头中的值的资源。DevTools 会将所有找到的 Cookie 值填充到自动完成中。 |
status-code |
显示与特定 HTTP 状态码匹配的资源。 DevTools 会将所有找到的状态码填充到自动完成下拉菜单中。 |
- 表示取反,小技巧:可以通过输入 - 之后的自动补全查看所有支持的选项。类比到河流,上游和下游概念就非常明确,水从上游往下游流动。
在工业生产车间中,不同工序就组成一条河流,流动的产品,前面的工序是上游,后面的工序是下游。
下游依赖上游。
在软件设计中,不同服务(SOA、微服务)组成一条河流,流动的是数据,先处理数据的是上游,后处理数据的是下游。
下游依赖上游。
注意:数据是怎么个流动方式的不重要,可能是上游推的,可能是下游拉的。上游和下游之间可能会互相调用 API,这个也不影响数据的依赖关系。
总之,上游靠近入口网关,下游靠近出口网关。
开源项目中,fork 关系组成一条河流,流动的是代码,被 fork 的项目是上游,fork 出来的项目是下游。
下游依赖上游。
当然,下游的代码更新也可能会反馈到上游。
两周前,美国社会向来最具争议的政策之一——自上世纪 60 年代开始践行的“平权法案”(Affirmative Action)被推翻。
美国最高法院针对涉及哈佛大学和北卡罗莱纳大学被控在招生时考虑种族比例的案件裁定,宪法禁止大学在招生过程中考虑申请人的种族因素。这一判决被视作自推翻堕胎权判例后又一次历史性裁决,也有观点指出,这一裁决更多体现美国最高院保守派压倒性势力以及保守主义的全面回归。
看理想两位节目主讲人庞颖、詹青云,关于此次平权法案被推翻特别录制了一期番外,延续《思辨力 35 讲》的节目形式,庞颖和詹青云分别从支持者、反对者的两方立场就平权法案的争议与利弊进行了一场辩论。问题不仅关乎种族正义、教育平等,也关乎社会的公正与良善。
Python 内部的 GIL(全局解释器锁)使 Python 的多线程开发变得更加简单,避免了大部分竞争条件,但是限制了 Python 进程使用多核心处理器,所有需要并行的场景全部受限。
官方建议,如果需要用到多核,那就选择多进程编程。
Python 出现的时候还没有多核 CPU,而现在多核心早就成为了主流,4 核、8 核太常见了。
因此从来不乏移除 GIL 的声音,不过没有一次成功。要想不对现有的项目造成太大的影响简直难于登天。
PS:几年前有一个叫做 Gilectomy 的项目(GIL Ectomy,GIL 切除术)因为导致 Python 性能下滑严重而失败。
最大的挑战是要保持对现有代码的兼容性,保住基本盘,也就是容易上手,容易开发。
2021 年,香农计划成员 Eric Snow 提交 PEP 684 A Per-Interpreter GIL(每个解释器一个 GIL)。
这应该是一个比较稳妥的方案,但我怀疑性价比是否足够。
PS:和下面提到的 nogil 方案不冲突。
PEP 683 – Immortal Objects, Using a Fixed Refcount
PEP 554 – Multiple Interpreters in the Stdlib
2021 年,Meta(Facebook)开发者 Sam Gross 基于 Python 3.9 创建了一个 nogil 的分支,最终证明了这个方案技术上可行,相较于 Gilectomy 单核性能没有收到太大的影响,拓展性也不错。
现在是最接近移除 GIL 的时刻。
如果顺利通过,几年之后,我们就能用上没有 GIL 的 Python。
--disable-gil 来创建一个没有 GIL 的 Python 版本。