">
はじめに
ネットワーク IO と同様、ファイルの読み取りと書き込みも時間のかかる操作です。
デフォルトでは、Python はシステムの読み取りと書き込みのブロックを使用します。
f = file('xx') f.read()
が呼び出された場合、 イベント ループ がブロックされることを意味します
この記事では、asyncio.Future オブジェクトを使用してファイルの非同期読み取りと書き込みをカプセル化する方法について簡単に説明します。コードは現在 GitHub にのみあります。
Linuxまず、ノンブロッキングの場合、read の各呼び出しがすぐに返されるように変更する必要があります。戻り値が空であることは、ファイル操作がまだ完了していないことを意味します。それ以外の場合は、読み取りファイルの内容です。
ブロックと非ブロックの切り替えはオペレーティング システムに関連するため、この記事では、 Linux バージョン。Unix システム プログラミングの経験がある場合は、Python の操作が似ています。
RreeeFuture オブジェクトは、
JavaScriptで値が計算されるプレースホルダーです。 future を使用できます。
result = await future を使用すると、future が値を取得した後に戻ります。これは、await
演算子を使用することも意味します。
loop.call_soon
この時点で、私たちのアイデアは、loop.call_soon メソッドを通じてイベントループに挿入できます。ファイルの読み書きが完了していない場合、残りの読み書きバイト数を計算し、読み書きが完了するまで再度イベントループを挿入する機能が登場しました。
従来の Unix プログラミングでは、読み取りと書き込みの while ループが asyncio イベント ループ
に置き換えられることがわかります。以下は、このプロセスの回路図コードです
flag = fcntl.fcntl(self.fd, fcntl.F_GETFL) if fcntl.fcntl(self.fd, fcntl.F_SETFL, flag | os.O_NONBLOCK) != 0: raise OSError()
以上がasyncio を使用して Python でファイルの読み取りと書き込みをカプセル化する詳細な説明と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。