当前位置: 首页 > 网络应用技术

Python转弯多久(Python去)

时间:2023-03-08 00:24:30 网络应用技术

  本文将讨论Python走得多长时间,而知识点与Python相对应。我希望这对您有帮助。不要忘记收集此网站。

  本文目录清单:

  1. Python开发人员在转移到语言之前需要知道什么?2。为什么我要从Python转到3。Python开发人员需要知道何时迁移到4.学习Python需要多长时间?请参阅文章末尾的要求。[谢谢Zhang Jiawei(@ghosert)的热情翻译。如果其他朋友也有良好的原创或翻译,您可以尝试将其推荐给Bole在线。])博客文章,它介绍了我们在持续的迁移中的经验到大量的python/cython代码。如果您想了解整个故事,背景和所有内容,请继续阅读。开发人员需要在输入GO语言之前知道,请单击链接:从Python到Go的迁移的背景(Tips Trips)这是对阿拉伯语的情感分析。阿拉伯语是一个困难的骨头,因为它的单词变化非常复杂。将阿拉伯语的单词分开(将一个句子划分为几个独立单词)更加困难,因为阿拉伯语本身也可能包含空白字符(例如:“ aleff”单词位置中的“ aleff”)。这不是泄漏。保证使用支持向量机(SVM)来获得句子后面最有可能的含义,并在其中添加情感元素。随后,我们使用22个型号(22个SVM),在一个文档中,我们将分析每个单词。拥有一个500个单词文档,然后SVM基于100,000个比较。PythonRepustate几乎完全是一家Python商店。我们使用Django来实现API和网站。因此,为了保持代码一致,合理地使用Python可以使用Python来实现意识到意识到意识到意识到意识到意识到实现代码。阿拉伯情感引擎。只是做原型和实施,Python是一个不错的选择。它的表达能力非常强大,第三方库也非常好。如果您适用于Web服务,那么Python是完美的。但是当您比较时低级别的计算,并依靠Python中的大量字典 (python中的字典类型),一切都较慢。我们可以处理大约两到三个阿拉伯文档,但这太慢了。Python分析仪,并开始研究花了这么长时间。我记得我之前说过我们有22个SVM,我需要处理每个单词吗?好吧,这些都是线性处理,未加密处理。反应是改变线性处理以映射/减少。简单地说:python不适合地图/减少。当您需要并发时,Python易于使用。在2013年Python会议(Translator:PyCon:Pycon:PyCon 2013),Guido谈论了郁金香。他的新项目弥补了Python的缺点,但只能启动一段时间,但是如果您有更好的事情,我们为什么必须等待?选择Go Changue或回家?我在Mozilla的朋友告诉我Mozilla将大量的基本日志架构切换到Mozilla内部的GO语言,部分原因是Google是由Google设计的,并支持并发作为设计开始时的第一个优先级,而不是添加添加之后像Python的各种解决方案一样。因此,我们开始用GO语言替换Python。尽管尚未正式启动GO代码,但结果非常令人鼓舞。我们现在可以每秒处理一千个文档,使用较少的内存,我们可以处理一千个文档,我们可以处理。不需要在Python中调试您:丑陋的多进程/gevent/“为什么Control-C不能杀死该过程”。为什么我们喜欢成为GO语言以及如何使用编程语言(解释与解释与汇编类型,动态语言与静态语言年龄)。如果您理解它,您会说:“当然,GO语言会更快。”是的,我们还可以用Java重写所有内容,我们还可以看到类似的改进, 但这不是GO语言获胜的原因。感觉这种代码可以起作用(不仅在运行,甚至在逻辑上都不可行)。我知道它听起来不可靠,但确实是。就冗余(或非冗余)而言,这与Python非常相似。它将功能作为第一个目标,因此功能编程将很容易理解。当然,GO线程和频道使您的生活更轻松。您可以通过静态类型带来的性能得到大大改进,并且可以更细致地控制记忆的分布,但是您不必为此支付过多的语言表达方式。被删除,有时您确实需要在处理GO代码时实际上需要更改相对于Python的思维模式。因此,这是我在迁移代码时录制的笔记列表 - 只是我转换Python代码时从脑海中随机出现的想法要走:没有内置的 - 集合类型(必须使用地图,并检查是否没有集合,您必须自己编写收藏,并且没有元组类型,例如元组类型,否则您必须写下您的自己的结构,或使用没有类似__getAttr __()方法的切片(即,数组),您必须始终检查存在而不是设置默认值。例如,在Python中,您可以编写值= dict.get.get.get.get(“ a_key”,“ default_value”)必须始终检查错误(或明确明确规定了符号错误)这些变量/袋子不能使用,因此简单的测试还需要在[]字节和字符串之间转换一些代码。regexpuse.regexp use [] byte。这是正确的,但是将某些变量转换为某些变量更加松散烦人的python。 而且它不会犯错。您不能混合数据结构的类型。也许这不是干净,但是有时在python中,我使用词典与字符串和列表混合的值。但是GO不起作用。您必须清理数据结构或使用自定义结构。您不能将元组或列表打包到几个不同的变量(例如:x,y,z = [1,2,3])驼峰峰值形成样式(如果没有第一个写入方法名称/结构名称,则他们不会接触其他包)。我更喜欢python的小写字母加上行 - 名称样式。必须明确检查是否有错误!= nil,与Python不同,可以像Bool一样检查许多类型(0,“”,没有一个可以解释为某些模块上的文档。例如(crypto/md5),但是在IRC上使用nuts非常有用,提供了很好的帮助。更像是编程语言,例如伪代码。GO具有更多的非字母字符,并使用||而不是“或“和”和“ .write([[] byte)和file.writestring(string),这与Python开发人员的Python相反:“解决问题”。细绳。必须重新确定fmt.sprintf没有构造函数函数。因此,通常的方法是创建一个newType()方法,以返回结构else(或否则)。例如,= and:=如果我只想要“键”或只想要“值”,例如:dict.keys()或dict.values()或一个oneTuplass列表,例如:dict.items(),Go语言没有等效的事情, 您只能列举自己的地图以构建列表类型。类型,我想通过给定的键值调用这些功能。您可以在Go中执行此操作,但是所有功能都必须接受并返回同一件事,例如:如果您使用JSON,并且您的JSON是对您的术语,则相同的方法签名。您必须构造自定义的结构以匹配JSON块,然后将原始JSON解析为您的自定义结构的实例。在Python World中,值得做的比object = json.loads(json_blob)做更多的事情吗?值得,一百万倍。速度提高了太多,因此很难放弃。在同一时间,我认为Go是当前的趋势,因此,当招募新员工时,我认为将GO作为重要组成部分将非常有帮助累积保证技术。]

  在木偶的邀请下,我去了Xishanju行动和维护团队进行简短的分享,谈论为什么我将我们的项目从Python转移到了。

  坦率地说,在一群Python用户面前,这实际上是一件事,放弃了Python来求助于Python。这实际上是压力的问题。语言与vim和emac相同。注意粉丝可能具有强烈的反击。因此,我只能从我们项目的实际情况开始。就为什么我最终选择去而言。

  你为什么放弃python

  首先,我必须谈论为什么我们选择python。在我加入企业快速磁盘团队之前,整个项目包括较早的Jinshan Fast Disk与Python开发了。时间,主要是因为Python很简单且发展迅速。对于大多数没有团队中服务开发经验的学生,Python确实是一个不错的选择。

  Python的简单高效,我有深刻的了解。在那个时候,有几个程序员在私人云项目中,但是我们需要为许多大型企业提供定制开发的大型企业。多亏了Python,我们可以快速生存。等级,在公司迅速挂起之后,我们开始了Light Office项目,并且自然使用Python来构建原始版本。

  尽管Python非常强大,但我们在使用时也遇到了一些问题,主要来自以下方面:

  动态语言

  Python是一种动态的强型语言。但是,仍然可能存在INT +字符串之类的错误,因为对于变量,编写代码时,有时我们很容易忘记哪种类型的变量是。

  在Python中,可以允许同名的功能。后一个功能将涵盖先前的功能。一旦我们的系统是一个非常严重的错误,因此。

  上面提到的静态语言可以帮助我们检测到何时编译,而无需等到问题发生。尽管我们有一个完美的测试用例,总会有案例。如果我可以编译,那应该很好。

  表现

  实际上,这一直是许多人谈论python的地方,但是Python有适合它的东西。很难使用Python开发一些高性能模块,这也很难做到。

  Python的GIL会导致真正的多线程,每个人都可能会说我不会使用多个程序。

  使用无状态分布的多个过程非常方便。例如,处理HTTP请求。我们在NGINX后面安装了200多个Django服务器,以处理HTTP,但是许多过程自然会导致高度的整体机器负载。

  但是,即使我们使用多个Django流程来处理HTTP请求,Python仍然无法处理一些超大的请求。因此,我们使用开放性来实现高频http请求以实现实现。不同的代码。

  同步网络模型

  Django的网络正在阻止网络,也就是说,如果我们需要访问外部服务,在等待结果返回期间,Django无法处理任何其他逻辑(除了多线程除外)。如果访问外部服务需要很长时间,这意味着我们的整个服务几乎无法在几乎很长一段时间内提供。

  为了解决此问题,我们只能继续打开更多的Django流程。同时,我们需要确保所有服务都可以快速处理响应,但考虑到这实际上是一件非常不可靠的事情。

  异步网络模型

  Tornado的网络模型是异步的,这意味着它不会出现,因为Django无法响应该服务,因为无法使用外部服务。它很小而简单。我曾深入撰写几篇文章,以分析龙卷风。

  尽管龙卷风是异步的,但Python的MySQL库不支持异步,这意味着,如果我们访问龙卷风中的数据库,我们仍然可能会面临由数据库问题引起的整个服务。

  实际上,异步模型的最大问题是切割代码逻辑。因为事件是触发的,所以我们都通过回调进行相关处理,因此代码中通常有一件事,传递回调,然后从回调中回调,结果是整个代码逻辑非常混乱。

  Python没有本地的Coroutine支持。尽管您可以通过Gevent和Greenlet的补丁方法支持公司,但毕竟,Python源代码已更改。此外,Python的收益率也可以执行简单的Coroutine模拟,但毕竟,它不能跨堆栈,并且它可以执行非常有限。我不知道3.X版本是否有所改进。

  开发操作和维护部署

  当我第一次使用Python开发项目时,我没有成功安装项目所需的袋子。MySQL图书馆已成功安装了很长时间。老板,一位同事将他的整个Python目录包装给我,以便我可以正常运行该项目。换句话说,现在对Docker感到非常高兴。

  部署Python服务时,我们需要在服务器上安装一堆袋子。通过木偶和盐解决部署问题非常麻烦。但是,就静态编译而言,仅使用一个二进制文件很方便。

  代码失控

  Python非常灵活和简单。编写c只能完成数十行。没有它,可以解决Python的行代码。但是它太简单了,这使许多学生无法对代码进行深入思考并仔细考虑整个架构。需求出现,POP -UP,键盘,键盘敲响了快速实现,结果是该代码变得越来越混乱,最终导致整个项目代码失控。

  尽管这也有我们自己的原因,例如,没有良好的代码审核机制,但没有良好的项目规范,但是个人认为,如果程序员没有接受良好的编码培训,那么很容易与Python一起编写不良代码,因为它太多了,因为它太多了,因为它太多了,因为它太多了,因为它太多了。

  当然,我并不是要使用Python开发大型项目。Douban和Dropbox都是一个很好的例子,但是在我们的项目中,我们的Python代码失控了。

  上面提到的所有都是我们在实际项目中python遇到的问题。尽管最终都解决了它们,但它让我感到,随着项目的复杂性的增加,交通绩效的压力增加,python也被比较了一个不错的选择。

  为什么选择去

  在谈论Python之后,让我们谈谈为什么我们选择GO。实际上,除了Python之外,我们还有其他选择,Java,PHP,Lua(OpenReast),但最后我们选择了Go。

  尽管Java和PHP是最好的编程语言(每个人都很战斗),但我更喜欢一种更简单的语言。尽管性能很强大,但LUA仍然是一种动态语言,它也会遇到前面提到的动态语言中的一些问题最后,Qianjinshan Xu Fangwei使用的GO是前线 - 直列建筑师洋葱的前部,因此我们自然选择了GO。

  Go不是完美的,值得我们呕吐的地方。

  错误,好吧,如果您有一个语言清洁同学,您可能真的无法忍受GO的语法,尤其是商定的最后一个返回值是错误。此代码通常填充此代码:

  如果_,err:= w.write(data1);呃!= nil {

  returun err

  }

  如果_,err:= w.write(data2);呃!= nil {

  returun err

  }

  难怪有需求的茎。当Java的程序员编写配置时,GO程序员已经编写了大多数代码,但是当Java完成编写的程序员编写时,GO程序员仍在编写ERR!= nil!本质

  在这方面,错误价值已建议使用一个好的解决方案。

  软件包管理,GO的软件包管理太弱了,只有一个GOT,也就是说,如果您不小心更新外部库,则可能无法编译现有代码。尽管已经有许多开源解决方案,例如Godep和GB现在仅出现了,毕竟不是正式的。Google似乎还通过供应商机制管理第三张 - 党派图书馆。我希望GO 1.5或随后的版本能够解决这个问题。

  GC,Java的GC已经开发了20年,GO是如此的时间,GC铁并不完美。因此,我们仍然无法按照我们的意愿编写代码,否则GC可能会根据大量要求将其粘在整个服务中。因此,有时需要使用对象池和内存池。尽管代码很丑陋,但性能仍在继续。

  尽管GO具有直角,但缺乏通用物,使我们在实现函数时可以编写大量重复代码,例如INT32和INT64类型排序。我们必须单独编写两组代码,这是如此多余。go 1.4得到GO生成的支持,但是根据GO的AST库,这仍然需要手动编写相关的解析器,这也很困难。尽管有很多开源生成实施,毕竟不是正式的。

  当然,有很多地方值得谈论,这不会一个人列出,但Go仍然具有其优势。

  静态语言,强类型。静态汇编可以帮助我们检查大量错误。强大的GO类型甚至可以扭曲到不支持隐藏类型的类型转换。尽管编写代码觉得很尴尬,但它会减少犯错误的可能性。

  GOFMT,这应该是我知道提供统一格式的代码工具的第一种官方语言。GOFMT,GOFMT,每个人的代码很长,最后都没有括号,或者是新的鸡蛋痛的代码样式。代码样式是相同的,很容易查看GO代码。

  出生于并行支持中,因为Goroutine和Channel使用使用来编写分布式应用程序,并且编写并发程序非常容易。代码逻辑分开是由疼痛而没有鸡蛋疼痛引起的,并且代码逻辑是顺序的。

  性能,GO的性能可能无法跟上C,C ++和开放式,但确实很强大。在我们的项目中,单个GO流程现在由一台机器部署,这完全可以做事。进行前200个Python过程,CPU和MEMS占据较低。

  直接将二进制汇总到服务器上的操作和维护部署,安装一堆需要安装的环境非常简单,而不是Python。当然,如果有CGO,我们还需要投掷相应的动态库。

  发展效率虽然GO是一种静态语言,但我个人认为开发效率确实很高,直觉与Python相当。就我个人而言,最好的例子是,我很快开发了许多带有GO的开源组件,作为LedisDB,Go-Mysql等。这些初始版本在很短的时间内完成。对于我们的项目,我们还将第一个版本重组了一个月,并发布了它。

  实际项目中的一些提示

  到目前为止,我们几乎所有的服务器项目都转移到了。当然,我们在使用时也遇到了一些问题。列表是一种经验共享。

  godep,我们将Godep用于第三方图书馆管理,但是我在Godep中遇到的最大的坑是构建标签问题。如果文件具有构建标签,则GODEP可能会忽略此文件。

  io截止日期,如果您可以自己自己处理,那么GO的截止日期由计时器控制,但是计时器使用数组来实现堆。全局使用全局锁。Timeout太常见了,很容易引起性能问题。

  GC,我还说,使用一个多功能池,一个对象池。此外,我还发现,如果对象的生命周期与goroutine一致,则性能的提高也很好。我还询问了GO小组中的相关问题。每个人都猜测Mayit是因为某些对象实际上是在Goroutine的8K堆栈上分配的,因此没有其他GC在一起。

  GO GOB,如果您想做RPC服务,GOB不是一个不错的选择。首先,Python的泡菜无法使用。然后,为了制作不同的系统数据,任何软件包都必须带来详细信息的类型。大小太多了。

  这是一篇关于迁移大型Python/Cython代码的长篇文章。如果您想了解整个内容,背景和其他信息的所有信息,请阅读它。如果您只对Python开发人员需要了解的知识感兴趣,请提早提取您应该知道的内容。

  背景

  保证的最大技术成就是实现阿拉伯情绪分析。阿拉伯语是一个困难的骨头,因为阿拉伯语词汇的形式非常复杂。阿拉伯语的标记(将句子分为单个单词)也比英语更罕见,因为阿拉伯语的单词可能包括空间(例如单词中的“ Aleph”位置)。没有泄漏机密性,因此保证使用支持向量机(SVM)来获得句子最有可能的含义,并推断出该句子的情感句子。我们总共使用22个型号(22个支持向量机),并且将分析文档中的每个单词。换句话说,如果文档包含500个单词,则将其与支持向量机器进行比较超过10,000次。

  Python

  保证几乎完全由Python建造。我们使用Django来构建API界面和网站架构。因此,为了保持代码的一致性,请使用Python实现所有阿拉伯情感引擎。在原型设计和实施过程中,Python仍然是一个不错的选择:极好的选择:极好的选择性能能力,强大的第三方库资源等等。硬桌子(python中的字典),运行速度会放慢速度。我们只能在一秒钟内处理2至3个阿拉伯语单词,这太慢了。相反,我们的英语情感引擎每秒可以处理500个单词。

  瓶颈

  因此,我们开始了python分析仪开始缓慢调查的原因。他们会处理每个单词吗?事实证明,此过程是按顺序进行的,而不是并行进行。不适合地图/减少。当您需要并发时,Python不禁在PyCon 2013会议上,Guido谈到了Tulip。他希望解决一个用于解决此问题的新项目,但是要发布它需要一段时间。但是,如果您有更好的选择,为什么要等待它?

  选择Golang或回到我的家乡(回家)

  Mozilla的朋友告诉作者,Mozilla服务的大多数代码架构都迁移到了,部分原因是Goroutines非常方便。Go是由Google员工开发的。在设计开始时,并发需求被列为第一个级别的概念,而不是在像Python这样的许多解决方案之后。因此,我们开始从Python转移到Go。

  尽管GO代码尚未达到大规模输出,但所获得的结果已经非常兴奋。我们可以在一秒钟内处理1,000个文档,并且所使用的内存大大减少了,我们不需要调试和解决多个文档-Process/coroutine(gevent)/“为什么使用Python..process和其他问题杀死了我”。

  我喜欢去的原因

  任何了解编程语言的人(了解解释和汇编,动态和静态之间的区别)都会说:“哈,显然走得更快。”是的,我们可以用Java重写所有内容并实现类似的效果,但这不是赢得胜利的原因。您在Go中写的代码似乎是正确的。作者不清楚,但是一旦以某种方式编译了代码(编译过程非常快),您会觉得它可以工作(不仅运行错误,而且正确逻辑)。这听起来很模糊,但这是真的。类似于使用函数作为第一个类别对象的Python,因此函数编程很方便。毫无疑问,Goroutines和频道将使您更加担心-Fre -free。静态类型还将带来出色的性能改进和更准确的内存分配控制,但不会失去太多的表达。

  应该尽早知道

  排除美的话语,处理GO需要与Python的思维模式完全不同。以下是我在迁移过程中所做的一些笔记 - 某些事情是从Python迁移时随机想到的事情:

  没有内置的 - 集合类型(您需要使用地图,然后测试存在)

  由于没有收集类型,因此您需要编写自己的代码以实现交叉,组合等。

  元组(元组),您必须编写体系结构或自己使用切片(数组)

  没有诸如getTtr_()之类的方法,因此您需要连续检查存在,并且不能像python中的默认值:value = dict.get(“ a_key”,“ default_value”)

  必须不断检查错误(至少需要明确忽略它们)

  它不能包括未使用的变量或软件包,因此有时如果要测试一些简单的问题,则需要向代码添加注释

  在[]字节和字符串之间切换。regexp使用[]字节。这很清楚,但是在某些变量之间来回切换仍然很烦人

  Python更松散。您可以使用超过范围的索引获得弦片段,并且不会有任何问题。您也可以提取负面片段,但GO不会起作用。

  请勿使用混合的数据结构类型。也许它可能不合规,但是有时您可以使用混合的字符串和列表词典中的字典。它在GO中不起作用,要么清理数据结构或自定义结构。感谢Ralph Corderoy向作者展示如何正确操作(使用此界面,Luke)

  无法分解元组或列表的变量(例如x,y,x = [1,2,3])

  uppercamelcase(如果包装中的功能或结构性第一字母未限制,则不会暴露于其他软件包。

  您需要明确检查该错误是否存在!= nil,与python不同,有许多类型可用于布尔型类型(0,“”,没有任何类型将被解释为“假”)

  某些模块(例如加密/MD5)的文档不足,但是在IRC上进行努力非常好,特别是很好的支持

  不同类型的类型转换从数字转换为字符串(IT64 -Strings)不同于[]字节串(仅字符串([[]字节)))。

  GO的代码更像是一种编程语言,而Python更像是伪-code.go包含更多非数字字母字符,使用||并代表“或“和谐”

  将有file.write([]字节)和file.writestring(string),这将使它习惯于Python

  只有一种做事的方法。

  插入字符串很麻烦,我必须经常使用fmt.sprintf

  没有构造函数函数,常见方法是创建newType()函数以返回所需的结构

  否则,否则必须正确格式,否则必须与if子句的大括号符合一行。这很奇怪。

  根据功能的内部和外部位置,使用不同的分配操作员,例如= and:=

  如果您只需要获得的键值或列表值列表。

  dict.items()获得的Yuanzu列表无法在GO中获得。它只能单独迭代地图,然后创建自己的列表

  作者习惯于建立具有函数值的字典并通过键值调用函数。您可以在GO中

  这样做,但是所有功能都必须接受并返回相同的东西,也就是说,必须拥有相同的方法签名

  如果您正在使用JSON和一种混合的JSON,那么您仍然要求祝福。您必须创建一个个性化结构,可以匹配JSON二进制对象(BLOB)格式,然后求解原始JSON以成为用例对于您的个性化架构。比python中的句子要花费更多的努力。

  值得扔吗?

  价值,一百万个价值观,超级价值。速度的提高不可忽视。作者认为这也是成为流行语言的重要原因。因此,当招募时,作者认为这对于对此也很重要。将GO作为Python开发人员。

  一个星期或一个月。

  如果您根据每个人的不同学习和理解技能学习并从零基础学习Python,我认为这将花费大约半年到半年半。

  当然,Python相对简单。如果您有其他编程语言经验,则该条目Python仍然非常快。花了大约1-2个月的时间后,您可以编写一些小程序进行练习。5-6个月可用于进行项目。

  在一定程度上,一些基于零的初学者不太可能希望使用Python两个月。这也很难实现,无法迅速实现就业。

  引入Python的引入和Python的引入已经结束。我想知道您是否找到所需的信息?如果您想进一步了解此信息,请记住要收集对该网站的关注。