动动发财的小手,点个赞吧!
Asyncio 和协程可能不是解决程序中所有并发问题的最佳解决方案。话虽这么说,但也可能存在一些误解,使您无法充分利用 Python 中 asyncio 的功能。
在本节中,我们回顾了开发人员在考虑使用Asyncio时看到的一些常见异议。
1. 全局解释器锁(GIL)怎么样?
GIL 保护 Python 解释器的内部免受多线程的并发访问和修改。异步事件循环在一个线程中运行。这意味着所有协程都在单个线程中运行。因此,在使用 asyncio 和协程时 GIL 不是问题。
2. Python 协程是“真实的”吗?
协同程序在软件中进行管理。协程在 Python 运行时的 asyncio 事件循环中运行和管理(切换)。它们不是底层操作系统提供的功能的软件表示,如线程和进程。从这个意义上说,Python 不支持“原生协程”,但我不确定现代操作系统中是否存在这样的东西。
3. Python 不是并发错误吗?
错!
Python 通过协程、线程和进程提供一流的并发性。它已经存在了很长时间,并广泛用于开源和商业项目中。
4. Python 不是并发的坏选择吗?
开发人员喜欢 Python 的原因有很多,最常见的原因是它易于使用且开发速度快。Python 通常用于胶水代码、一次性脚本,但越来越多地用于大型软件系统。如果您使用的是Python,然后需要并发,那么您可以使用所拥有的东西。问题是毫无意义的。
如果您需要并发性并且您没有选择一种语言,那么另一种语言可能更合适,也可能不合适。考虑项目的功能和非功能需求(或用户需求、愿望和期望)的全部范围以及不同开发平台的功能。
5. 为什么不使用线程呢?
您可以使用线程而不是异步。任何使用线程开发的程序都可以重写为使用 asyncio 和协程。任何使用协程和 asyncio 开发的程序都可以重写为使用线程。在项目中采用 asyncio 是一种选择。
在大多数情况下,它们在功能上是等效的。许多用例将使用线程执行得更快,并且可能为更广泛的 Python 开发人员所熟悉。
网络编程和执行系统命令领域的一些用例在使用 asyncio 时可能更简单(代码更少),并且比使用线程更具可扩展性。