asynchronous API私はいくつかのセットアップがあり、それを引き裂くSMTPサーバーにメールを接続して送信するために使用しています。したがって、Python 3のcontextlib
のcontextmanager
をうまく使用できます。非同期コンテキストマネージャ
しかし、両方ともジェネレータ構文を使用して書き込みを行うため、書き込みが可能かどうかわかりませんが、
これは問題を示している可能性があります(非同期呼び出しと歩留まりの違いをコンテキストマネージャに示すためのyield-baseとasync-awaitの構文が混在しています)。
@contextmanager
async def smtp_connection():
client = SMTPAsync()
...
try:
await client.connect(smtp_url, smtp_port)
await client.starttls()
await client.login(smtp_username, smtp_password)
yield client
finally:
await client.quit()
現在、この種のことはPython内で可能ですか?私はどのようにしてwith
as
文を使用するのですか?そうでない場合、私はこれを達成するための別の方法がありますか?おそらく古いスタイルのコンテキストマネージャを使用していますか?
'asyncio'は、非同期コンテキストWITH''非同期にも導入していますマネージャのプロトコルについては、https://www.python.org/dev/peps/pep-0492/#asynchronous-context-managers-and-async-with – jonrsharpe
を参照してください。これは私が欲しいもののような外観です。私はチャンスを得るときにそれを実装するショットを与えるだろう。 – freebie
3.7(時点2018のリリース)では、contextlibは '@ asynccontextmanager'を持っています –