【问题标题】:Python built-in AsyncIO implementations?Python 内置 AsyncIO 实现?
【发布时间】:2019-02-04 18:25:24
【问题描述】:

我已经开始了解 AsyncIO,它基本上会“暂停”一个功能并在需要执行非阻塞操作(例如发出 Web 请求或打开文件)时转到下一个功能(还有其他功能吗?)

但是,异步 Web 请求或异步文件打开的内置实现在哪里?没有这些,AsyncIO 不只是一个概念吗?

我只找到了实现它们的外部库。

或者这是预期的情况?如果是这样,我应该如何实现自己的异步请求/文件库?

【问题讨论】:

  • 你为什么期望这些东西被内置? (此外,由于缺乏操作系统级别的支持,异步文件操作几乎都必须通过线程池。)
  • @user2357112 我只是不明白为什么您可以使用标准库做的唯一事情是 asyncio.wait(),就像所有在线示例和教程从未展示过真实案例一样
  • @user2357112 很好地使用线程我可以将任何操作抽象为非阻塞对吗?我不明白这一点

标签: python python-3.x python-asyncio python-3.7


【解决方案1】:

但是,异步 Web 请求或异步文件打开的内置实现在哪里?

asyncio 的目标是为构建异步库和框架提供基础设施。 Python 捆绑的asyncio 模块支持clientserver 连接中的套接字,subprocessessynchronization tools(包括queues),使用threading and multiprocessing 执行阻塞代码,以及阻塞代码之间的通信以及在 different thread 中运行的事件循环。

以该工具集为基础,第三方为异步httpfileconsole IO、websocketsdiscordmany more提供了开源库。

【讨论】:

    【解决方案2】:

    Python 支持 aysnc/await 在事件循环中进行自动调度。

    aiofiles 是一个 Apache2 许可库,用 Python 编写,用于处理异步应用程序中的本地磁盘文件。

    https://github.com/Tinche/aiofiles
    

    对于异步网络请求

    https://aiohttp.readthedocs.io/en/stable/
    

    更多异步实现,查看

    https://github.com/python/asyncio/wiki/ThirdParty
    

    【讨论】:

    • 是的,我知道,但这些不是内置的
    • Python 3 已经实现了异步操作的概念,这使得这些库成为可能,您不必编写自己的实现,因为它们已经过尝试和测试。 python 中的所有其他库也是如此,例如 requests、Beautifulsoup、PyCryptodome。无法以该语言提供每个实现。
    • 我认为 OP 要求内置异步功能。不幸的是,我不知道任何实现。线程和多处理是非阻塞操作所获得的
    • 我要问的是为什么没有内置成功的异步代码不是基本的,实现异步库的基本概念是什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多