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