uTools-Manuals/docs/python/asyncio.html
2019-04-08 23:22:26 +08:00

1 line
25 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-asyncio"><h1><span class="yiyi-st" id="yiyi-10">18.5. <a class="reference internal" href="#module-asyncio" title="asyncio: Asynchronous I/O, event loop, coroutines and tasks."><code class="xref py py-mod docutils literal"><span class="pre">asyncio</span></code></a> — 异步 I/O 、事件循环、 协程和任务 </span></h1><div class="versionadded"><p><span class="yiyi-st" id="yiyi-11"><span class="versionmodified"> 3.4 版本中新加入。</span></span></p></div><p><span class="yiyi-st" id="yiyi-12"><strong>源代码︰</strong><a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/asyncio/">lib/asyncio/</a></span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-13">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-14">asyncio包已经在<a class="reference internal" href="../glossary.html#term-provisional-package"><span class="xref std std-term">临时基础</span></a>中包含在标准库中。</span><span class="yiyi-st" id="yiyi-15">如果核心开发人员认为必要,则可能会发生向后不兼容的更改(直到并包括模块的删除)。</span></p></div><p><span class="yiyi-st" id="yiyi-16">此模块为编写单线程并发代码提高基础架构,通过使用协程、套接字和其他资源的 I/O 多路复用,运行网络客户端和服务器,以及其他相关的基元。</span><span class="yiyi-st" id="yiyi-17">以下是更详细的软件包内容列表:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-18">各种系统具体实现的可插拔 <a class="reference internal" href="asyncio-eventloop.html#asyncio-event-loop"><span>事件循环</span></a> ;</span></li><li><span class="yiyi-st" id="yiyi-19"><a class="reference internal" href="asyncio-protocol.html#asyncio-transport"><span>传输</span></a><a class="reference internal" href="asyncio-protocol.html#asyncio-protocol"><span>协议</span></a> 抽象(类似于 <a class="reference external" href="https://twistedmatrix.com/trac/">Twisted</a> 里的那些) ;</span></li><li><span class="yiyi-st" id="yiyi-20">具体支持 TCP、 UDP、 SSL、 子进程管道,延迟调用,和其他 (有些可能依赖于系统);</span></li><li><span class="yiyi-st" id="yiyi-21">一个模仿 <a class="reference internal" href="concurrent.futures.html#module-concurrent.futures" title="concurrent.futures: Execute computations concurrently using threads or processes."><code class="xref py py-mod docutils literal"><span class="pre">concurrent.futures</span></code></a> 模块但适合在事件循环中使用的 <a class="reference internal" href="asyncio-task.html#asyncio.Future" title="asyncio.Future"><code class="xref py py-class docutils literal"><span class="pre">Future</span></code></a> 类;</span></li><li><span class="yiyi-st" id="yiyi-22">基于 <code class="docutils literal"><span class="pre">yield</span> <span class="pre">from</span></code> (<span class="target" id="index-0"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-0380"><strong>PEP 380</strong></a>)的协程和任务帮助以顺序的方式编写并发代码;</span></li><li><span class="yiyi-st" id="yiyi-23">取消操作支持 <a class="reference internal" href="asyncio-task.html#asyncio.Future" title="asyncio.Future"><code class="xref py py-class docutils literal"><span class="pre">Future</span></code></a> 和协程;</span></li><li><span class="yiyi-st" id="yiyi-24">单线程的协程间使用的 <a class="reference internal" href="asyncio-sync.html#asyncio-sync"><span>同步基元</span></a> 类似于 <a class="reference internal" href="threading.html#module-threading" title="threading: Thread-based parallelism."><code class="xref py py-mod docutils literal"><span class="pre">threading</span></code></a> 模块里那些;</span></li><li><span class="yiyi-st" id="yiyi-25">一个接口用于将工作传递到线程池在绝对明确不得不使用一个阻塞I / O调用的库的时候。</span></li></ul><p><span class="yiyi-st" id="yiyi-26">异步编程比经典的"顺序"编程更复杂︰ 查看 <a class="reference internal" href="asyncio-dev.html#asyncio-dev"><span>Develop with asyncio</span></a> 页面,其中列出了常见的陷阱,并解释了如何避免它们。</span><span class="yiyi-st" id="yiyi-27">在开发期间 <a class="reference internal" href="asyncio-dev.html#asyncio-debug-mode"><span>启用调试模式</span></a> 以检测常见问题。</span></p><p><span class="yiyi-st" id="yiyi-28">目录:</span></p><div class="toctree-wrapper compound"><ul><li class="toctree-l1"><span class="yiyi-st" id="yiyi-51"><a class="reference internal" href="asyncio-eventloop.html">18.5.1.基础事件循环</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-29"><a class="reference internal" href="asyncio-eventloop.html#run-an-event-loop">18.5.1.1.运行事件循环</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-30"><a class="reference internal" href="asyncio-eventloop.html#calls">18.5.1.2. 调用</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-31"><a class="reference internal" href="asyncio-eventloop.html#delayed-calls">18.5.1.3.延迟调用</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="asyncio-eventloop.html#futures">18.5.1.4.期货</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-33"><a class="reference internal" href="asyncio-eventloop.html#tasks">18.5.1.5.任务</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-34"><a class="reference internal" href="asyncio-eventloop.html#creating-connections">18.5.1.6.创建连接</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-35"><a class="reference internal" href="asyncio-eventloop.html#creating-listening-connections">18.5.1.7.创建侦听连接</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-36"><a class="reference internal" href="asyncio-eventloop.html#watch-file-descriptors">18.5.1.8.看文件描述符</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-37"><a class="reference internal" href="asyncio-eventloop.html#low-level-socket-operations">18.5.1.9.低级的套接字操作</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-38"><a class="reference internal" href="asyncio-eventloop.html#resolve-host-name">18.5.1.10.解决主机名</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-39"><a class="reference internal" href="asyncio-eventloop.html#connect-pipes">18.5.1.11.连接管道</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-40"><a class="reference internal" href="asyncio-eventloop.html#unix-signals">18.5.1.12.UNIX 信号</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-41"><a class="reference internal" href="asyncio-eventloop.html#executor">18.5.1.13.执行者</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-42"><a class="reference internal" href="asyncio-eventloop.html#error-handling-api">18.5.1.14.错误处理 API</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-43"><a class="reference internal" href="asyncio-eventloop.html#debug-mode">18.5.1.15.调试模式</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-44"><a class="reference internal" href="asyncio-eventloop.html#server">18.5.1.16.服务器</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-45"><a class="reference internal" href="asyncio-eventloop.html#handle">18.5.1.17.处理</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-50"><a class="reference internal" href="asyncio-eventloop.html#event-loop-examples">18.5.1.18.事件循环例子</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-46"><a class="reference internal" href="asyncio-eventloop.html#hello-world-with-call-soon"> 18.5.1.18.1. Hello World with call_soon()</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-47"><a class="reference internal" href="asyncio-eventloop.html#display-the-current-date-with-call-later">18.5.1.18.2.显示当前日期与 call_later()</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-48"><a class="reference internal" href="asyncio-eventloop.html#watch-a-file-descriptor-for-read-events">18.5.1.18.3.看一个文件描述符读取事件</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-49"><a class="reference internal" href="asyncio-eventloop.html#set-signal-handlers-for-sigint-and-sigterm">18.5.1.18.4.设置信号情报和 SIGTERM 信号处理程序</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-60"><a class="reference internal" href="asyncio-eventloops.html">18.5.2.事件循环</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-52"><a class="reference internal" href="asyncio-eventloops.html#event-loop-functions">18.5.2.1.事件循环函数</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-53"><a class="reference internal" href="asyncio-eventloops.html#available-event-loops">18.5.2.2.可用事件循环</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-56"><a class="reference internal" href="asyncio-eventloops.html#platform-support">18.5.2.3.平台支持</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-54"><a class="reference internal" href="asyncio-eventloops.html#windows"> 18.5.2.3.1. 视窗 T0&gt;</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-55"><a class="reference internal" href="asyncio-eventloops.html#mac-os-x"> 18.5.2.3.2. Mac OS X</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-57"><a class="reference internal" href="asyncio-eventloops.html#event-loop-policies-and-the-default-policy">18.5.2.4.事件循环策略和默认策略</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-58"><a class="reference internal" href="asyncio-eventloops.html#event-loop-policy-interface">18.5.2.5.事件循环政策接口</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-59"><a class="reference internal" href="asyncio-eventloops.html#access-to-the-global-loop-policy">18.5.2.6.获取global循环政策</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-73"><a class="reference internal" href="asyncio-task.html">18.5.3.任务和协同程序</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-64"><a class="reference internal" href="asyncio-task.html#coroutines">18.5.3.1.协程</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-61"><a class="reference internal" href="asyncio-task.html#example-hello-world-coroutine">18.5.3.1.1.示例Hello World协程</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-62"><a class="reference internal" href="asyncio-task.html#example-coroutine-displaying-the-current-date">18.5.3.1.2.示例:协程显示当前日期</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-63"><a class="reference internal" href="asyncio-task.html#example-chain-coroutines">18.5.3.1.3.示例:链协程</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-65"><a class="reference internal" href="asyncio-task.html#invalidstateerror">18.5.3.2. InvalidStateError 0&gt;&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-66"><a class="reference internal" href="asyncio-task.html#timeouterror"> 18.5.3.3. TimeoutError T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-69"><a class="reference internal" href="asyncio-task.html#future">18.5.3.4. Future</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-67"><a class="reference internal" href="asyncio-task.html#example-future-with-run-until-complete">18.5.3.4.1. 实例: Future 与 run_until_complete()</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-68"><a class="reference internal" href="asyncio-task.html#example-future-with-run-forever">18.5.3.4.2.示例未来与run_forever()</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-71"><a class="reference internal" href="asyncio-task.html#task">18.5.3.5.任务</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-70"><a class="reference internal" href="asyncio-task.html#example-parallel-execution-of-tasks">18.5.3.5.1.示例:并行执行任务</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-72"><a class="reference internal" href="asyncio-task.html#task-functions">18.5.3.6.任务函数</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-93"><a class="reference internal" href="asyncio-protocol.html">18.5.4.传输和协议 (基于回调的 API</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-79"><a class="reference internal" href="asyncio-protocol.html#transports">18.5.4.1.传输</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-74"><a class="reference internal" href="asyncio-protocol.html#basetransport"> 18.5.4.1.1. BaseTransport T0&gt;</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-75"><a class="reference internal" href="asyncio-protocol.html#readtransport"> 18.5.4.1.2. ReadTransport T0&gt;</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-76"><a class="reference internal" href="asyncio-protocol.html#writetransport"> 18.5.4.1.3. WriteTransport T0&gt;</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-77"><a class="reference internal" href="asyncio-protocol.html#datagramtransport"> 18.5.4.1.4. DatagramTransport T0&gt;</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-78"><a class="reference internal" href="asyncio-protocol.html#basesubprocesstransport"> 18.5.4.1.5. BaseSubprocessTransport T0&gt;</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-86"><a class="reference internal" href="asyncio-protocol.html#protocols">18.5.4.2.协议</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-80"><a class="reference internal" href="asyncio-protocol.html#protocol-classes">18.5.4.2.1.协议类</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-81"><a class="reference internal" href="asyncio-protocol.html#connection-callbacks">18.5.4.2.2.连接回调</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-82"><a class="reference internal" href="asyncio-protocol.html#streaming-protocols">18.5.4.2.3.流协议</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-83"><a class="reference internal" href="asyncio-protocol.html#datagram-protocols">18.5.4.2.4.数据报协议</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-84"><a class="reference internal" href="asyncio-protocol.html#flow-control-callbacks">18.5.4.2.5.流控制回调</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-85"><a class="reference internal" href="asyncio-protocol.html#coroutines-and-protocols">18.5.4.2.6.协程和协议</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-92"><a class="reference internal" href="asyncio-protocol.html#protocol-examples">18.5.4.3.协议示例</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-87"><a class="reference internal" href="asyncio-protocol.html#tcp-echo-client-protocol">18.5.4.3.1. TCP回显客户端协议</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-88"><a class="reference internal" href="asyncio-protocol.html#tcp-echo-server-protocol">18.5.4.3.2. TCP echo服务器协议</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-89"><a class="reference internal" href="asyncio-protocol.html#udp-echo-client-protocol"> 18.5.4.3.3. UDP回显客户端协议</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-90"><a class="reference internal" href="asyncio-protocol.html#udp-echo-server-protocol">18.5.4.3.4. UDP echo服务器协议</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-91"><a class="reference internal" href="asyncio-protocol.html#register-an-open-socket-to-wait-for-data-using-a-protocol">18.5.4.3.5.注册打开的套接字以使用协议</a>等待数据</span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-105"><a class="reference internal" href="asyncio-stream.html">18.5.5.流 (协同基于 API)</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-94"><a class="reference internal" href="asyncio-stream.html#stream-functions">18.5.5.1.流函数</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-95"><a class="reference internal" href="asyncio-stream.html#streamreader"> 18.5.5.2. 的StreamReader T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-96"><a class="reference internal" href="asyncio-stream.html#streamwriter"> 18.5.5.3. StreamWriter的 T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-97"><a class="reference internal" href="asyncio-stream.html#streamreaderprotocol"> 18.5.5.4. StreamReaderProtocol T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-98"><a class="reference internal" href="asyncio-stream.html#incompletereaderror"> 18.5.5.5. IncompleteReadError T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-99"><a class="reference internal" href="asyncio-stream.html#limitoverrunerror"> 18.5.5.6. LimitOverrunError T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-104"><a class="reference internal" href="asyncio-stream.html#stream-examples">18.5.5.7.流示例</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-100"><a class="reference internal" href="asyncio-stream.html#tcp-echo-client-using-streams">18.5.5.7.1. TCP echo客户端使用流</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-101"><a class="reference internal" href="asyncio-stream.html#tcp-echo-server-using-streams">18.5.5.7.2. TCP echo服务器使用流</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-102"><a class="reference internal" href="asyncio-stream.html#get-http-headers">18.5.5.7.3.获取HTTP标头</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-103"><a class="reference internal" href="asyncio-stream.html#register-an-open-socket-to-wait-for-data-using-streams">18.5.5.7.4.注册打开的套接字以使用流等待数据</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-115"><a class="reference internal" href="asyncio-subprocess.html">18.5.6.子过程</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-106"><a class="reference internal" href="asyncio-subprocess.html#windows-event-loop">18.5.6.1. Windows事件循环</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-107"><a class="reference internal" href="asyncio-subprocess.html#create-a-subprocess-high-level-api-using-process">18.5.6.2.创建子流程使用Process</a>创建高级API</span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-108"><a class="reference internal" href="asyncio-subprocess.html#create-a-subprocess-low-level-api-using-subprocess-popen">18.5.6.3.创建子进程使用subprocess.Popen</a>的低级API</span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-109"><a class="reference internal" href="asyncio-subprocess.html#constants">18.5.6.4.常数</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-110"><a class="reference internal" href="asyncio-subprocess.html#process">18.5.6.5.过程</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-111"><a class="reference internal" href="asyncio-subprocess.html#subprocess-and-threads">18.5.6.6.子进程和线程</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-114"><a class="reference internal" href="asyncio-subprocess.html#subprocess-examples">18.5.6.7.子过程示例</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-112"><a class="reference internal" href="asyncio-subprocess.html#subprocess-using-transport-and-protocol">18.5.6.7.1.使用传输和协议的子流程</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-113"><a class="reference internal" href="asyncio-subprocess.html#subprocess-using-streams">18.5.6.7.2.使用流的子流程</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-123"><a class="reference internal" href="asyncio-sync.html">18.5.7.同步原语</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-119"><a class="reference internal" href="asyncio-sync.html#locks">18.5.7.1.锁定</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-116"><a class="reference internal" href="asyncio-sync.html#lock">18.5.7.1.1.锁定</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-117"><a class="reference internal" href="asyncio-sync.html#event">18.5.7.1.2.事件</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-118"><a class="reference internal" href="asyncio-sync.html#condition">18.5.7.1.3.条件</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-122"><a class="reference internal" href="asyncio-sync.html#semaphores">18.5.7.2.信号量</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-120"><a class="reference internal" href="asyncio-sync.html#semaphore">18.5.7.2.1.信号量</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-121"><a class="reference internal" href="asyncio-sync.html#boundedsemaphore"> 18.5.7.2.2. BoundedSemaphore T0&gt;</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-128"><a class="reference internal" href="asyncio-queue.html">18.5.8.队列</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-124"><a class="reference internal" href="asyncio-queue.html#queue">18.5.8.1.队列</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-125"><a class="reference internal" href="asyncio-queue.html#priorityqueue"> 18.5.8.2. 的PriorityQueue T0&gt;</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-127"><a class="reference internal" href="asyncio-queue.html#lifoqueue"> 18.5.8.3. LifoQueue T0&gt;</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-126"><a class="reference internal" href="asyncio-queue.html#exceptions">18.5.8.3.1.例外</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-139"><a class="reference internal" href="asyncio-dev.html">18.5.9.使用asyncio开发</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-129"><a class="reference internal" href="asyncio-dev.html#debug-mode-of-asyncio">18.5.9.1.调试模式asyncio</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-130"><a class="reference internal" href="asyncio-dev.html#cancellation">18.5.9.2.取消</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-131"><a class="reference internal" href="asyncio-dev.html#concurrency-and-multithreading">18.5.9.3.并发和多线程</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-132"><a class="reference internal" href="asyncio-dev.html#handle-blocking-functions-correctly">18.5.9.4.正确处理阻塞函数</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-133"><a class="reference internal" href="asyncio-dev.html#logging">18.5.9.5.记录</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-134"><a class="reference internal" href="asyncio-dev.html#detect-coroutine-objects-never-scheduled">18.5.9.6.检测协程对象从未安排</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-135"><a class="reference internal" href="asyncio-dev.html#detect-exceptions-never-consumed">18.5.9.7.检测未使用的异常</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-136"><a class="reference internal" href="asyncio-dev.html#chain-coroutines-correctly">18.5.9.8.链协程</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-137"><a class="reference internal" href="asyncio-dev.html#pending-task-destroyed">18.5.9.9.待处理任务已销毁</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-138"><a class="reference internal" href="asyncio-dev.html#close-transports-and-event-loops">18.5.9.10.关闭传输和事件循环</a></span></li></ul></li></ul></div><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-140">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-141"><a class="reference internal" href="#module-asyncio" title="asyncio: Asynchronous I/O, event loop, coroutines and tasks."><code class="xref py py-mod docutils literal"><span class="pre">asyncio</span></code></a>模块是在<span class="target" id="index-1"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-3156"><strong>PEP 3156</strong></a>中设计的。</span><span class="yiyi-st" id="yiyi-142">有关运输和协议的动机性引物,请参见<span class="target" id="index-2"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-3153"><strong>PEP 3153</strong></a></span></p></div></div></div>