2020年2月2日日曜日

如果Python4无法解决全局解释器锁定的问题。 2020.02.02当前解决方案。 石冢雅弘(Aon CEO)

截至2020.02.02,
Python 2和3不能解决全局解释器锁定的问题。

或者,
使用Go lang开发网站,Intranet,LINE应用程序等。
对于AI和机器学习的开发,将使用Python,对于Go lang,解决方案将使用网站+ AI(用于Go lang的API库)+ AI(机器学习)DATA。

相关资料:

再见Python,Hi Go

资料来源:

最近用Go编写的,以前用Python编写的任务的作者与Python相比,Go的优缺点的摘要。

原始文字
再见Python,Hello Go (英语)
翻译请求者
D98ee74ffe0fafbdc83b23907dda3665 df3136f800e7ed9931ed5f9f1afad935
译者
df3136f800e7ed9931ed5f9f1afad935 姆斯克
翻译审稿人
D98ee74ffe0fafbdc83b23907dda3665 双重市场
原作者翻译报告
502天前 编辑 ,对原始文本有评论
 




我使用Go语言进行了很多以前用Python编写的处理。 例如,以下处理是可能的。
  • 处理存储在Amazon S3中的Cloudfront日志
  • 将巨大(太字节级)文件移入和移出S3的过程
  • 数据库和S3之间的同步文件匹配
这几乎总是一次性的过程,因此理想的是用脚本语言编写它。 该程序需要快速编写,并且有可能很快被丢弃。 由于这些任务总是新的且独特的,因此您可以重用的代码最少。
这里是使用Go代替Python的优点。

有一个编译器很好

我经常在Python中犯无聊的错误。 变量名称/函数名称错误或传递了错误的参数。 开发工具可以找到它们,但是这些工具通常需要特殊的初始化。 我仍然无法轻松设置pylint,而且我不喜欢需要它的成熟IDE。
最坏的情况是变量错误类型隐藏在条件分支的后面。 该脚本运行了几个小时后会导致错误。 一切搞砸之后,您需要重新运行。
单元测试可以发现许多这些问题。 但是,100%的覆盖率很困难,我不想花时间在一次性脚本的单元测试上。
编译语言解决了所有这些问题。 编译器将捕获这些错误。 因此,我喜欢Go语言来处理数百行数据。

发展速度

编译器语言的缺点是开发速度慢。 对于C / C ++和Java尤其如此。
当您知道将开发速度保持在最低水平时,Go就足够简单了。 我仍然加快了Python的速度,但是与用python编写相比,go语言的生产率大约为85%。
85%还不错。 那是因为使用编译器可以大大减少小错误。

并行处理的优势

如您所知,Go最初是为并行处理而创建的。
我们的团队经常需要并行处理程序来处理S3和数据库中的大量数据。
如果任务是IO密集型工作,则Python线程可以提供帮助。 但是,对于占用大量CPU的任务,就全局解释器锁而言,Python很难。
我享受多线程Go无需任何特殊工作即可工作的简单方式。 将Ctrl-C与多线程Python结合使用时,您是否遇到任何问题?

易于部署

我喜欢使用单个二进制文件。 我经常在EC2上运行代码。 这是为了使脚本与S3 /数据库之间的通信路径更近。 如果使用Python进行此操作,则需要确保所有必需的软件包都已安装在远程计算机上,并且不会与其他同事安装的任何软件包发生冲突。
Virtualenv解决了大多数此类问题,但是Go语言更加简单。
大多数时候,您只需要交叉编译Linux的Mac go代码,然后将其复制到远程计算机上并运行即可。 所有依赖项都包含在二进制文件中。

样式一致(格式)

起初,我对gofmt工具感到沮丧。 特别是,很难使用制表符缩进代替空格。 我认为这是不正常的。
但是,在使用它时,它变得依赖于gofmt 。 通过自动格式化,无需任何考虑,您就无需进行格式化。 无论我从事什么项目,我所有的代码始终采用一致的格式样式。 格式化是标准Go语言工具的功能。
在Python中,类似的效果(一致的格式)更昂贵。 我必须正确设置pylint并检查它pylint所有项目中是否一致。

工具优势

一个例子就是gofmt 。 我使用的任何编辑器(VSCode,vim,Sublime Text)都提供了所有不错的Go扩展。 这是Go语言作为标准功能提供工具的优势。
由于此优势,无需使用IDE即可获得类似Java的智能感知。 在Python中,我从未接触过此功能。

缺少部分

每当我看到对Go语言的批评时,都是由于Go中缺少功能(如泛型)所致。 由于缺少泛型,所以我从未遇到过重大问题。 (看到地图和切片可以做多少事情,您会感到惊讶。)但是我遇到了许多其他问题。

围棋语言过于自信

Go语言是我声称的语言,即使在我编写的语言中也是如此。 它以强制制表符而不是空格(假设您使用gofmt ),使用特定目录结构以及在GOPATH环境变量中构建代码开始。 许多这些Go语言功能都不容易更改。
Go学习成本低的原因之一是这些功能无法更改。 如果您不想公开以大写字母(函数,变量等)开头的名称,那不是很好。 幸运的是,这些并没有困扰我,但我了解其他任何事情。
Python更加灵活。

图书馆提供的东西很少

在这方面比较Python和Go是不公平的。 Go更新得多。 但是当我发现Go不支持的功能时,我很困惑。 当应该作为内置函数的代码发布在StackOverflow上时,您会更加困惑,每个人的行为就像将代码复制并粘贴到您自己的项目中。
两个示例(近年来出现的那些示例):
  • 排序切片(幸运的是,自Go1.8起提供)
  • Math.round只能处理整数,不能处理float变量(例如,如果要舍入为.5)。 在Go1.10之前,甚至没有Math.round。
是的,其中一些是由于Go中缺少泛型,也因为Go开发人员遵循的策略是仅向标准库添加绝对必要的内容。
我了解以上两点。 但是,如果遇到必须实现自己的小功能,那就很烦人了。
我希望随着Go语言的发展,这些烦恼将会减少。

〒197-0828
东京秋留野市Akidome 5-3-11
5-3-11 Akiru秋留野市日本东京
怡安首席执行官
石冢雅弘
(石冢真雄)
电话:042-559-8638
iPhone:070-3861-5011
免费电话

+81 50 5532 0868

Skype的
直播:cloud9slack
http://aon.tokyo
http://aon.co.jp正在准备中
cloud9slack@gmail.com

0 コメント:

コメントを投稿