澳门新葡亰网址下载Python术语恐遭强制修改;苹果Safari曝漏洞;华为提前发布5G手机|极客头条

by admin on 2020年3月19日

澳门新葡亰网址下载 1

原标题:Python术语恐遭强制修改;苹果Safari曝漏洞;华为提前发布5G手机|极客头条

  • 原文地址:How I fixed a very old GIL race condition in Python 3.7
  • 原文作者:Victor Stinner
  • 澳门新葡亰网址下载,译文出自:掘金翻译计划
  • 本文永久链接:
  • 译者:kezhenxu94
  • 校对者:Starrier

前两天,我们报道了一篇关于 Redis 的新闻,因为 Redis 中的 master-slave
术语被认为具有侵犯性,所以出现了很多呼吁修改的声音。最终,Redis
作者迫于无奈,在尽量不影响项目的情况下,做了一些妥协。而如今,这项带有政治色彩的“运动”蔓延到了
Python 身上,就连宣布退出 Python 核心开发组决策层的 Guido van Rossum
也被请回来解决关于政治不正确的语言辩论。Guido
van Rossum 是 Python
创始人,素有“终身仁慈独裁者(BDFL)”之称,不过他现在的处境就像教父中黑手党柯里昂家族首领的 Michael
Corleone 一样

「CSDN 极客头条」,是从 CSDN
网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道。风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流。

著名的 Python GIL (Global Interpreter Lock, 全局解析器锁)
库中一个严重的 bug 花了我 4 年的时间去修复
,Python GIL 是 Python
中最容易出错的部分之一。我不得不钻入 Git 的提交历史里面,找到 26 年前
Guido van Rossum
提交的记录:彼时,线程还是很晦涩难懂的东西。且听我慢慢道来。

和其他开源社区一样,Python 的管理员也被问及是否真的想继续使用 master 和
slave
术语来描述相关的技术操作和关系,因为这些单词会让一部分人想起美国旧时的黑奴制度,这是一个历史遗留问题而且直到今天依然会引起关于政治方面的激烈争论。

快讯速知

在 2014 年 3 月份的时候, Steve Dower 报告了一个当 “C 语言线程“ 使用
Python C API 时产生的 bug bpo-20891:

就在上周,在 Red Hat 工作的 Python 开发者 Victor Stinner 公开提交了 4
个 PR,希望能将 Python
文档和代码中出现的 “master” 和 “slave” 修改为像 “parent” 和 “worker”
这样的术语,以及对其他类似的术语也进行修改。Victor Stinner 在他的 bug
report
中解释说,出于多元化的考虑,尽量避免出现与奴隶制相关的术语反而可能会更好,像
‘master’ 和 ‘slave’
这种。他还指出之前就已有关于这个问题的投诉,但都是私下提出的 ——
以避免引起激烈的争论。

  • 北京试运行腾讯乘车码,5000余辆公交可刷码乘车
  • 华为:完成5G网络最重要测试,5G手机将提前发布
  • 蚂蚁金服成立小程序事业部,半年内向个人开发者开放
  • 全球移动宽带用户年底将达44亿,比三年前增加11亿
  • 韩国要求谷歌、Facebook、Netflix必须在韩安装服务器
  • 特斯拉新功能:电量不足时,推送到用户手机
  • 微软Edge和苹果Safari浏览器曝漏洞,可致用户访问到虚假网站
  • Facebook推出新AI系统:有助检测仇恨言论
  • Chrome OS现已原生支持Windows文件分享功能
  • Android快速框架 ZBLibrary18.3发布,自动生成请求代码
  • Python 术语 master-slave 恐遭强制修改

在 Python 3.4rc3 中,在一个不是用 Python 创建的线程中调用
PyGILState_Ensure() 方法,但不调用 PyEval_InitThreads()
方法时,会导致程序出现严重错误,并退出:

Fatal Python error: take_gil: NULL tstate

等到 Python 3.8 发布时,相信像这些被认为具有“侵犯性”的术语将会减少。

国内要闻

我的第一句评论:

事实上,在技术圈子里,这种关于政治正确的事屡见不鲜。前两天关于 Redis
的这件事,社区去年就因这个问题进行了激烈的争论。而在
2014 年,Drupal 在经过一番论证之后,将 “master” 和 “slave”
这两个词换成了 “primary” 和
“replica”。同年,Django
用 “leader” 和
“follower” 代替了 “master”
和 “slave”。CouchDB 也在 2014 年进行了类似的语言描述方面的清理。

北京试运行腾讯乘车码,5000余辆公交可刷码乘车

在我看来这是 PyEval_InitThreads() 的一个 bug 呀.

这些争论在科技行业也仍然存在。2004年,观察组织 ——
全球语言监测组织将科技行业中 “master” 和 “slave”
的使用列为当年政治最不正确的术语。而这些术语的行业用法可追溯到几十年前,我们甚至可以在多个
RFC 中找到它,例如 RFC
977 (1986)。

澳门新葡亰网址下载 2

澳门新葡亰网址下载 3Release
the GIL!

而这次关于 Python 的讨论,我们可以预见到,参与讨论的每个 Python
开发者都不会同意 Stinner 提出的变更。Stinner 提交的 bug
report
中的评论回应了关于这一主题的所有其他在线争论。

使用示意图

两年内我我就忘了这个 bug 。到了 2016 年 3 月份,我修改了 Steve
的测试代码,以兼容 Linux (当时的测试代码是在 Windows
上写的)。我成功地在我的电脑上重现了这个 bug ,然后写了个
PyGILState_Ensure() 的修复补丁。

“我不会因为 Python 根据秘密评论改变其行为而感到激动”,Larry Hastings
感叹道,“传统上,Python
有一个非常开放的治理模式,所有讨论都是在公开场合进行的。”

“是否真的有必要用 SJW(Social Justice Warrior) 的意识形态/术语来“污染”
Python 代码库?”Gabriel Marko 质疑道,“那么接下来又会是什么?”

Raymond Hettinger
也对这些术语是否真的有明显伤害他人感到疑问。他在评论中写道:“如果一个特定的段落表述不清楚或令人反感,这确实应该被修改;否则,我们不应该让含糊不清的政治正确观念影响其他明确的常见英语用法。而且据我所知,没有一个案例表明,在文档中使用了’master’就是为了反映奴隶制这件事,或者暗含对这一概念的认可。”

今天,腾讯官方微博宣布,从今天开始,腾讯乘车码在北京公交试运行上线。

一年后,也就是 2017 年 11 月,Marcin Kasperski 问道:

最后,van Rossum
介入了这场争论,以结束一场似乎是无解的讨论。他在评论中写到:“我正在关闭这些
PR,Victor 的 PR
中有四分之三已被合并。但第四个不应被合并,因为它是对 UNIX ptys
底层术语的反映。还有一个关于 ‘pliant children’ -> ‘helpers’
的讨论,这个后续可以作为 PR 处理,而不需要保持开放讨论的状态。”

据悉,腾讯乘车码支持通州、昌平、顺义、密云、大兴、平谷等区域500余条公交线路5000余辆公交车。

这个修复补丁发布了吗?我在更改日志里面没有看到…

I’m closing this now. Three out of four of Victor’s PRs have been
merged. The fourth one should not be merged because it reflects the
underlying terminology of UNIX ptys. There’s a remaining quibble about
“pliant children” -> “helpers” but that can be dealt with as a
follow-up PR without keeping this discussion open.

用户首次使用腾讯乘车码,通过微信小程序搜索“腾讯乘车码”,定位到北京市开通乘车码后,“北京一卡通”电子卡,就会自动加入微信卡包。

糟糕,我又一次完全忘了这个问题!这次,我不仅提交了我对
PyGILState_Ensure() 的修复补丁
,还写了单元测试
test_embed.test_bpo20891()

然而,我们都应该明白,要摆脱真正的 master 和
slave,绝不仅仅是一件提交 pull
request 就能解决的事。

再次使用时,只需打开微信下拉聊天框,打开“腾讯乘车码”小程序,或通过“我-卡包-会员卡”即可使用。

好了,这个 bug 已经在 Python 2.7, 3.6 和主分支上修复啦。在 3.6 和
master 上,这个补丁还带了单元测试呢。

编译自 https://www.theregister.co.uk/

华为:完成5G网络最重要测试,5G手机将提前发布

我在主分支上的修复提交, 提交 b4d1e1f7:

(文/开源中国)    

近日,华为宣布,已完成5G网络最重要测试,首款5G手机,会提前到明年六月之前就发布。

bpo-20891: Fix PyGILState_EnsureWhen PyGILState_Ensure() is called in a non-Python thread beforePyEval_InitThreads(), only call PyEval_InitThreads() after callingPyThreadState_New() to fix a crash.Add an unit test in test_embed.

华为宣布,在IMT-2020(5G)
推进组组织的中国5G技术研发试验第三阶段测试中,华为率先完成基于3GPP的5G
SA(standalone,独立组网)C-Band基站设备功能测试。

然后我就关了这个 issue bpo-20891 了…

工信部之前表示,2020年5G网络将在国内商用,而在正式商用前,终端厂商早已开始忙着测试。按照目前的进度来看,华为将会是国内首个提供5G基带、处理器的芯片厂商,同时他们应该也会是最先推出5G手机的。

一切都安好…… 直到一周之后,我意识到我新加的单元测试在 macOS
系统上时不时会奔溃。最终我成功找到重现路径,以下例子是第三次运行时奔溃:

蚂蚁金服成立小程序事业部,半年内向个人开发者开放

macbook:master haypo$ while true; do ./Programs/_testembed bpo20891 ||break; date; doneLun 4 déc 2017 12:46:34 CETLun 4 déc 2017 12:46:34 CETLun 4 déc 2017 12:46:34 CETFatal Python error: PyEval_SaveThread: NULL tstateCurrent thread 0x00007fffa5dff3c0 (most recent call first):Abort trap: 6

澳门新葡亰网址下载 4

test_embed.test_bpo20891() 在 macOS 的 PyGILState_Ensure()
出现了一个竞态条件:GIL 锁自身的构建……没有锁保护!添加一个锁来检测
Python 当前有没有 GIL 锁显然毫无意义……

今天,蚂蚁金服宣布,正式成立小程序事业部、并开放支付成功页入口,全面对接阿里生态。此外,该事业部还将在未来3年内,投入10亿元创新基金,帮助开发者和商家,升级服务场景。

我提出了修复 PyThread_start_new_thread() 的一个不是很完整的建议:

支付宝官方团队还透露,未来半年内,支付宝小程序,将逐步向个人开发者开放。

我找到一个可行的修复方案:在 PyThread_start_new_thread() 中调用
PyEval_InitThreads()。这样 GIL
就能够在第二个线程一产生时就创建好了。当有两个线程在运行的时候就不能再创建
GIL 了。但至少在“是不是用
python”这种非黑即白的情况下,如果一个线程不是用 Python
创建的,这种修复方案会失效,但此时这个线程又会调用
PyGILState_Ensure()

全球移动宽带用户年底将达44亿,比三年前增加11亿

Antoine Pitrou 问了一个简单的问题:

澳门新葡亰网址下载 5

为什么不在解析器初始化时就调用
PyEval_InitThreads()?有什么不好之处吗?

据美国科技类博客TechCrunch报道,国际电信联盟发布新报告显示,到今年年底,全球将有44亿移动宽带用户,相比三年前增加了11亿。

多亏了 git blamegit log 命令,我找到了“按需创建
GIL”代码的发源地,26 年前的一个变更

另据悉,现在有不少于25个国家的移动宽带订阅平均普及率,超过100%(每100名用户拥有超过100台的移动联网设备)。

commit 1984f1e1c6306d4e8073c28d2395638f80ea509bAuthor: Guido van Rossum <guido@python.org>Date: Tue Aug 4 12:41:02 1992 +0000 * Makefile adapted to changes below. * split pythonmain.c in two: most stuff goes to pythonrun.c, in the library. * new optional built-in threadmodule.c, build upon Sjoerd's thread.{c,h}. * new module from Sjoerd: mmmodule.c (dynamically loaded). * new module from Sjoerd: sv (svgen.py, svmodule.c.proto). * new files thread.{c,h} (from Sjoerd). * new xxmodule.c (example only). * myselect.h: bzero -> memset * select.c: bzero -> memset; removed global variable+void+init_save_thread()+{+#ifdef USE_THREAD+ if (interpreter_lock)+ fatal("2nd call to init_save_thread");+ interpreter_lock = allocate_lock();+ acquire_lock(interpreter_lock, 1);+#endif+}+#endif

也就是说,很多人拥有两个、或者更多的设备,接入了互联网。而在澳门,每100人的移动宽带订阅数,高达每月322个。

我猜测这种动态创建 GIL
的意图是为了避免那些只使用了一个线程(即永远不会新建线程)的应用“过早”创建
GIL 的情况。

国际要闻

幸运的是,Guido van Rossum 当时也在,能够和我一起找出根本原因:

韩国要求谷歌、Facebook、Netflix必须在韩安装服务器

是的,最初的原因就是线程是很晦涩难懂的,也没有多少代码里面会用线程,那时,由于
GIL 代码中的 bug ,我们肯定会觉得频繁使用 GIL
会导致性能下降
奔溃风险的上升。现在了解到我们不再需要担心这两方面的问题了,可以尽情地使用初始化它了

澳门新葡亰网址下载 6

我提议了 Py_Initialize()另一个修复方案:总是在 Python
一启动的时候就创建 GIL ,不再“按需”创建,以避免竞态条件发生的风险:

近日,由韩国民主党议员Byun
Jae-il领导的10名议员,最近提交了4份议案,希望“创造公平的竞争环境”,从而解决韩国信息和通信科技(ICT)领域存在的“反向歧视”问题。

+ /* Create the GIL */+ PyEval_InitThreads();

如果获得通过,这项新规就会强制外国互联网公司,为韩国用户提供更加稳定的服务,且还会与韩国ICT公司平等竞争。但是,违规企业将会面临处罚。

Nick Coghlan 问我是否能够在我的补丁上运行一下性能基准测试。我在我的
PR 4700 上运行了 pyperformance,差距高达 5%:

特斯拉新功能:电量不足时,推送到用户手机

haypo@speed-python$ python3 -m perf compare_to  2017-12-18_12-29-master-bd6ec4d79e85.json.gz  2017-12-18_12-29-master-bd6ec4d79e85-patch-4700.json.gz  --table --min-speed=5+----------------------+--------------------------------------+-------------------------------------------------+| Benchmark | 2017-12-18_12-29-master-bd6ec4d79e85 | 2017-12-18_12-29-master-bd6ec4d79e85-patch-4700 |+======================+======================================+=================================================+| pathlib | 41.8 ms | 44.3 ms: 1.06x slower  |+----------------------+--------------------------------------+-------------------------------------------------+| scimark_monte_carlo | 197 ms | 210 ms: 1.07x slower  |+----------------------+--------------------------------------+-------------------------------------------------+| spectral_norm | 243 ms | 269 ms: 1.11x slower  |+----------------------+--------------------------------------+-------------------------------------------------+| sqlite_synth | 7.30 us | 8.13 us: 1.11x slower  |+----------------------+--------------------------------------+-------------------------------------------------+| unpickle_pure_python | 707 us | 796 us: 1.13x slower  |+----------------------+--------------------------------------+-------------------------------------------------+Not significant : 2to3; chameleon; chaos; 

澳门新葡亰网址下载 7

哇,5 个基准降低了。性能回归测试在 Python 中很受欢迎:我们一直都致力于让
Python 跑得更快!

据国外媒体消息,9月10日,特斯拉进行了一次更新,更新之后,加入了电量预警功能,当电量低于9%的时候,会进行推送,让车主知道电池即将耗尽,需要及时充电。

我没有料到有 5
个基准测试性能都降低了。这需要更深层的探究,但我没有时间去做这些探究,如果要做性能回归测试,我又得对此负责,感觉太害羞/羞愧了。

另据悉,该通知发送方式,是直接发送到车主手机上,方便提前进行准备。

在圣诞节假期之前,我还下不定决心,然而 test_embed.test_bpo20891()
还是一如既往地在 macOS 系统上随机奔溃。让我在假期前的两周时间内去接触
Python 中最最容易出错的部分 —— GIL 着实让我感到很难受。所以我决定跳过
test_bpo20891() 的单元测试直到过完假期再说。

微软Edge和苹果Safari浏览器曝漏洞,可致用户访问到虚假网站

Python 3.7 ,没有彩蛋。

澳门新葡亰网址下载 8

澳门新葡亰网址下载 9Sad
Christmas tree

据英国科技新闻网站The
Register报道,近日网络安全研究人员保罗,对媒体称,他发现了微软Edge和苹果Safari浏览器中的一个漏洞,该漏洞可导致用户可能在正常的网址下,访问到虚假网站内容。

在 2018 年的 1 月末,我再一次运行了我 PR 中性能降下来的那 5
个基准测试。我在我的笔记本上手动运行这些基准测试,让不同的测试使用独立的
CPU :

目前,微软公司已经针对Edge浏览器,发布了安全补丁和修补了漏洞。

vstinner@apu$ python3 -m perf compare_to ref.json patch.json --tableNot significant : unpickle_pure_python; sqlite_synth; spectral_norm; pathlib; scimark_monte_carlo

Facebook推出新AI系统:有助检测仇恨言论

好了,根据 Python
“性能”基准测试套件,现在证明了我的第二个修复方案其实并没有对性能产生多大的影响

澳门新葡亰网址下载 10

我决定把我的修复方案推送到主分支,提交 2914bb32:

据外媒消息,Facebook宣布开发出一款新型人工智能系统,可用于检测仇恨性言论。

bpo-20891: Py_Initialize() now creates the GIL The GIL is no longer created "on demand" to fix a race condition whenPyGILState_Ensure() is called in a non-Python thread.

美国科技媒体CNET认为,这款“武器”的推出,可谓时候刚好。在Facebook面临内容审查的当下,会大有用处。

然后我在主分支上重新启动了 test_embed.test_bpo20891() 单元测试。

据悉,该系统代号为“Rosetta”,可帮助计算机阅读和理解,每天发布到社交网络的数十亿张图像和视频。

Antoine Pitrou 想过要把补丁移植到 Python 3.6 不能合并:

凭借该系统,Facebook可以更容易地,发现平台上违背反仇恨言论规则的内容。

我觉得没必要。大家已经可以调用 PyEval_InitThreads() 了。

程序员专区

Guido van Rossum 也不想移植这个补丁。所以我就从 3.6 的主分支中移除了
test_embed.test_bpo20891()

Chrome
OS现已原生支持Windows文件分享功能

由于同样的原因,我也没有在 Python 2.7 中应用我的第二个补丁,此外,Python
2.7 没有单元测试,因为移植太难了。

澳门新葡亰网址下载 11

但至少,Python 2.7 和 3.6 应用了我的第一个补丁,PyGILState_Ensure()

谷歌最近做出了一项改进 —— 为 Chrome
OS添加原生的Windows文件分享(SMB)功能支持。在即将推出的新版Chrome
OS中,用户将能够启用本机文件共享、以及Windows机器的网络浏览。

Python 在一些边界情况下仍然有一些竞态条件。这种 bug 是在 C 线程使用
Python API 创建 GIL 时发现的。我推送了第一个补丁,但另一个新的竞态条件在
macOS 上出现了。

在将网络共享添加到“文件”(File)应用中后,可以方便地查看文件,就像它已经直连Chrome
OS 那样。

我不得不钻进 Python GIL 非常古老的提交历史中。幸运的是 Guido van
Rossum
能够帮忙一起找到 bug 的根本原因。

Android快速框架ZBLibrary18.3发布,自动生成请求代码

在一次基准测试小故障后,我们意见达成一致,在 Python 3.7
中总是一启动解析器就创建
GIL,而不是“按需”创建。这种变更没有对性能产生明显的影响。

18.3 更新内容:

同时我们也决定保持 Python 2.7 和 3.6
不变,以防止任何回归测试的风险:继续“按需”创建 GIL。

  • 支持APIJSONAuto自动生成的请求代码;
  • OkHttp升级到3.11.0;
  • 升级SDK、Gradle、App的版本;
  • 替换已失效的图片URL;
  • 坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI、Data、Listener)以及模板和工具类并规范代码;
  • 封装层级少,简单高效兼容性好。Android Studio、Eclipse多平台支持。

著名的 Python GIL (Global Interpreter Lock, 全局解析器锁)
库中一个严重的 bug 花了我 4 年的时间去修复
,Python GIL 是 Python
中最容易出错的部分之一。很开心现在这个 bug
已经被我们甩开了:在即将发布的 Python 3.7 中已经被完全修复了!

Python
术语 master-slave 恐遭强制修改

在 bpo-20891 查看完整的故事。感谢帮助我修复这个 bug 的所有开发者!

上周,在 Red Hat 工作的 Python 开发者
Victor Stinner 公开提交了 4 个 PR,希望能将 Python 文档和代码中出现的
“master” 和 “slave” 修改为像 “parent” 和 “worker”
等的术语,因为这些词会让一部分人想起美国旧时的黑奴制度,容易引发关于政治方面的激烈争论。

掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金
上的英文分享文章。内容覆盖
Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注
掘金翻译计划、官方微博、知乎专栏。

但是针对这一观点,很多 Python
开发者却并不赞同。“是否真的有必要用 SJW(Social Justice Warrior)
的意识形态/术语来’污染’Python
代码库?”,“据我所知,没有一个案例表明,在文档中使用了’master’就是为了反映奴隶制这件事,或者暗含对这一概念的认可。”

为此,已宣布退出 Python
核心开发组决策层的 Guido van Rossum 也被迫介入这场争论。他表示:“我正在关闭这些 PR,Victor 的
PR 中有四分之三已被合并。但第四个不应被合并,因为它是对 UNIX ptys
底层术语的反映。还有一个关于 ‘pliant children’ -> ‘helpers’
的讨论,这个后续可以作为 PR 处理,而不需要保持开放讨论的状态。”

style=”font-size: 16px;”>“程序员专区”内容来自开源中国社区 class=”backword”>返回搜狐,查看更多]()

责任编辑:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图