擅长:python、mysql、java
<p><code>async/await</code>通过设计具有感染力。在</p>
<p>接受你的代码将有不同的用户-同步和异步,并且这些用户将有不同的需求,随着时间的推移,实现会有所不同。在</p>
<p><strong>发布单独的库</strong></p>
<p>例如,比较<code>aiohttp</code>与<code>aiohttp-requests</code>与<code>requests</code>。在</p>
<p>同样,比较<code>asyncpg</code>与<code>psycopg2</code>。在</p>
<p><strong>如何到达那里</strong></p>
<p>选项1。(简单)克隆实现,允许它们发散。在</p>
<p>选项2。(合理)部分重构,例如,让异步库依赖并导入同步库。在</p>
<p>选项3。(radical)创建一个可以在同步和异步程序中使用的“纯”库。例如,请参见<a href="https://github.com/python-hyper/hyper-h2" rel="nofollow noreferrer">https://github.com/python-hyper/hyper-h2</a>。在</p>
<p>从好的方面来说,测试更容易、更彻底。考虑一下强制测试框架评估异步程序中所有可能的并发执行顺序有多困难(或不可能)。Pure library不需要它:)</p>
<p>从负面来看,这种风格的编程需要不同的思考,并不总是直接的,而且可能是次优的。例如,您可以编写<code>await socket.read(2**20)</code>,而不是<code>for event in fsm.push(data): ...</code>,并依赖库用户以适当大小的块向您提供数据。在</p>
<p>有关上下文,请参见<a href="https://vorpus.org/blog/some-thoughts-on-asynchronous-api-design-in-a-post-asyncawait-world/" rel="nofollow noreferrer">https://vorpus.org/blog/some-thoughts-on-asynchronous-api-design-in-a-post-asyncawait-world/</a>中的<code>backpressure</code>参数</p>