当前位置: 首页 > 科技观察

正名Python:语言本身不是瓶颈,可能是外部资源有问题

时间:2023-03-17 21:59:47 科技观察

Python真的很慢吗?这就需要具体问题具体分析。与C等编译型语言相比,Python在处理数字方面确实很慢。这也从侧面解释了为什么Python中加速数字处理的库(比如numpy)如此重要。但是对于所有用例,Python是否都比其他编程语言慢?不是真的,如果你看看许多为解决特定问题而优化的Python库的性能基准,你会发现Python比编译语言做得更好。以FastAPI性能基准为例,FastAPI是一个用于构建API的现代、快速(高性能)Web框架,使用Python3.6+并基于标准Python类型提示。Go语言显然比Python快,但是FastAPI在构建RESTAPI方面优于Go的一些库:WebFrameworksBenchmarkExcludingC++andJavawebframeworks。同样,在比较用于处理数据密集型神经影像管道的Dask(用Python编写)和Spark(用Scala编写)时,结果表明两个引擎之间没有实质性的性能差异。代码速度vs实用性从实用的角度来看,在为日常工作选择编程语言时,有几个不同的问题需要回答。(1)问题一:这种语言能否可靠地解决多个业务问题?如果您只关心速度,那么就不要使用Python,对于各种用例,有更快的替代方案。Python的主要优点是可读性、易用性和解决大量问题的能力。Python可以充当将不同系统、服务和用例连接在一起的粘合剂。(2)问题2:你能找到足够多的懂语言的员工吗?Python易于学习和使用,因此用户数量不断增长。以前使用Excel处理数字的用户现在可以快速学习使用Pandas编码,从而学会在不依赖IT资源的情况下自给自足。同时,这减轻了IT和分析部门的负担。如今,公司更容易找到了解Python并使用该语言维护Spark数据处理应用程序的数据工程师,而不是使用Java或Scala做同样的工作。许多组织在许多用例中逐渐转向Python,因为更容易找到了解Python的员工。相比之下,一些公司迫切需要Java或C#开发人员来维护他们现有的应用程序,但这些语言很难(多年才能掌握)并且对新手程序员似乎没有吸引力,他们可能会使用像Go这样更简单的语言在工作上赚更多钱或蟒蛇。(3)问题三:不同领域专家之间的协同如果你的公司使用Python,对于业务用户、数据分析师、数据科学家、数据工程师、后端和Web开发人员、运维工程师甚至系统管理员来说都是非常容易的。可能是同一种语言。这在项目中产生了协同作用,来自不同领域的人们可以一起工作并利用相同的工具。数据处理的真正瓶颈是什么?在平时的工作中,通常我们遇到的瓶颈不是语言本身,而是外部资源。让我们看几个例子。(1)示例一:写入关系型数据库当以ETL方式处理数据时,最终我们需要将这些数据加载到某个集中的地方。虽然我们可以利用Python中的多线程来更快地将数据写入某些关系数据库,但增加的并行写入数量可能会拉伸数据库的CPU容量。这意味着Python具有并行化和加速操作的机制,但关系数据库(受CPU内核数量限制)具有难以简单地通过更快的编程语言解决的局限性。(2)范例二:调用外部API另一个例子是使用外部RESTAPI提取数据用于数据分析需要,语言本身似乎不是这种情况下的瓶颈。虽然我们可以利用并行加速来摄取数据,但这可能是徒劳的,因为许多外部API限制了在特定时间段内可以发出的请求数量。因此,我们会刻意让脚本变慢,以保证不超过API的请求限制:time.sleep(10)(3)示例3:处理大数据从处理非常大的数据集的经验来看,无论如何你用的语言Neither不能直接使用笔记本内存来加载大数据。在这种情况下,你需要使用分布式处理框架,如Dask、Spark、Ray等。当使用单个服务器实例或笔记本时,处理的数据量是有限制的。如果你想将实际的数据处理卸载到一个计算节点集群上,甚至使用GPU来加速计算,Python恰好有一个庞大的框架生态系统可以让这个任务变得更容易:DoyouwanttouseGPUstoacceleratedataScientificcomputing速度?使用PyTorch、TensorFlow、Ray或Rapids(甚至是SQL-BlazingSQL)。你想加速你的大数据Python代码吗?使用Spark(或Databricks)、Dask或Prefect。您想加快数据分析处理速度吗?使用快速专用的内存中列式数据库,通过使用SQL查询确保高速处理。此外,如果您需要协调和监控发生在计算节点集群上的数据处理,您有ApacheAirflow、Prefect或Dagster等多个Python工作流管理平台可供选择,可以加速开发和维护数据管道。顺便说一下,有些人可能会抱怨Python没有充分利用它的功能,或者没有使用正确的数据结构来解决手头的问题。总而言之,如果您需要快速处理大量数据,您需要的是计算资源而不是快速的编程语言,一些Python库可以轻松地跨数百个节点分配工作。原文链接:https://towardsdatascience.com/is-python-really-a-bottleneck-786d063e2921id:almosthuman2014)》】点此查看作者更多好文