共计 1376 个字符,预计需要花费 4 分钟才能阅读完成。
异步编程是一种不会阻塞的编程范式。相同,申请和函数调用会在将来某个工夫以某种形式在后盾收回和执行。这使调用者有工夫执行其余流动,并在后果可用或调用者感兴趣时稍后解决收回的调用的后果。
1. 异步工作
异步意味着不同时,与同步或同时相同。在编程时,异步意味着申请动作,只管在申请时并未执行。它稍后执行。这将收回进行函数调用的申请,而不会期待调用实现。咱们能够抉择稍后查看函数调用的状态或后果。
- 异步函数调用:申请函数在某个工夫以某种形式被调用,容许调用者复原并执行其余流动。
函数调用将以某种形式在某个工夫在后盾产生,程序能够执行其余工作或响应其余事件。这是要害。咱们无法控制申请的解决形式或工夫,只是咱们心愿在程序执行其余操作时解决它。收回异步函数调用通常会产生一些申请句柄,调用者能够应用该句柄来查看调用状态或获取后果。这通常被称为 ” 将来 ”。异步函数调用的句柄,容许查看调用状态和检索后果。
2. 异步编程
收回异步工作并进行异步函数调用称为异步编程。异步编程次要用于非阻塞 I/O,例如从与其余过程或其余零碎的套接字连贯读取和写入。非阻塞 I/O 是一种在申请读取和写入的状况下执行 I/O 的形式,只管它是异步执行的。调用者不须要期待操作实现再返回。读取和写入操作以某种形式执行(例如,由底层操作系统或基于其构建的零碎),并且操作和 / 或数据的状态稍后由调用者检索,一旦可用,或当调用者筹备好时。
因而,咱们能够看到非阻塞 I/O 与异步编程的关系。实际上,咱们通过异步编程来应用非阻塞 I /O,或者通过异步编程实现非阻塞 I /O。非阻塞 I/O 与异步编程的联合是如此广泛,以至于它通常被简称为异步 I/O。
接下来,让咱们考虑一下 Python 中的异步编程反对。
3. Python 中的异步编程
从狭义上讲,Python
中的异步编程是指发出请求而不是阻塞期待它们实现。咱们能够通过多种形式在 Python
中实现异步编程,只管有一些与 Python 并发性相干。
3.1. asyncio
第一个例子是 asyncio
模块。该模块应用 async/await
语法和带套接字和子过程的非阻塞 I/O 间接提供异步编程环境。
它是应用在事件循环中运行的协程实现的,事件循环自身在单个线程中运行。更宽泛地说,Python
提供了能够异步执行工作的线程和过程。
例如,一个线程能够启动第二个线程来执行函数调用并复原其余流动。操作系统将在某个工夫安顿并执行第二个线程,而第一个线程可能会或可能不会手动查看工作的状态。
更具体地说,Python
在 ThreadPoolExecutor
和 ProcessPoolExeuctor
类中提供了基于执行器的线程池和过程池。这些类应用雷同的接口并通过返回 Future
对象的 submit()
办法反对异步工作。
3.2. multiprocessing
multiprocessing
模块还提供了应用 Pool
和 ThreadPool
类中的过程和线程的工作池,ThreadPoolExecutor
和 ProcessPoolExeuctor
类的前身。
这些类的性能是依据工作人员异步执行工作来形容的。它们显式地提供了用于执行工作的每种办法的同步(阻塞)和异步(非阻塞)版本。
例如,能够通过 apply()
办法同步或通过 apply_async()
办法异步收回一次性函数调用。
欢送 Star -> 学习目录
本文由 mdnice 多平台公布