前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python: 什么是异步编程? (1)

Python: 什么是异步编程? (1)

作者头像
数据科学工厂
发布2023-02-27 13:17:56
4410
发布2023-02-27 13:17:56
举报
文章被收录于专栏:数据科学(冷冻工厂)

异步编程是一种不会阻塞的编程范式。相反,请求和函数调用会在未来某个时间以某种方式在后台发出和执行。这使调用者有时间执行其他活动,并在结果可用或调用者感兴趣时稍后处理发出的调用的结果。

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 提供了可以异步执行任务的线程和进程。

例如,一个线程可以启动第二个线程来执行函数调用并恢复其他活动。操作系统将在某个时间安排并执行第二个线程,而第一个线程可能会或可能不会手动检查任务的状态。

更具体地说,PythonThreadPoolExecutorProcessPoolExeuctor 类中提供了基于执行器的线程池和进程池。这些类使用相同的接口并通过返回 Future 对象的 submit() 方法支持异步任务。

3.2. multiprocessing

multiprocessing 模块还提供了使用 PoolThreadPool 类中的进程和线程的工作池,ThreadPoolExecutorProcessPoolExeuctor 类的前身。

这些类的功能是根据工作人员异步执行任务来描述的。它们显式地提供了用于执行任务的每种方法的同步(阻塞)和异步(非阻塞)版本。

例如,可以通过 apply() 方法同步或通过 apply_async() 方法异步发出一次性函数调用。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 异步任务
  • 2. 异步编程
  • 3. Python 中的异步编程
    • 3.1. asyncio
      • 3.2. multiprocessing
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档