複数のログファイルが書き込まれるときにそれらを読み込み、asyncioで入力を処理したいと考えています。コードはウィンドウで実行する必要があります。私がstackoverflowとウェブの両方を検索することから理解しているところから、非同期ファイルの入出力はほとんどのオペレーティングシステムでは難しいです(例えば、select
は意図したとおりに動作しません)。私は他のメソッド(スレッドなど)でこれを行うことができると確信していますが、私はasyncioを試してみて、それがどのようなものかを見ていきます。最も有益な答えは、おそらく、この問題の解決策の「アーキテクチャ」、すなわち異なる機能とコルーチンをどのように呼び出すか、またはスケジュールするべきかを説明するものでしょう。以下は私に(許容されるポーリングを通じて、)行ごとにファイルを読み込み、発電与えasyncioでファイルを1行ずつ読み込みます
:
import time
def line_reader(f):
while True:
line = f.readline()
if not line:
time.sleep(POLL_INTERVAL)
continue
process_line(line)
いくつか監視するためのファイルやプロセスでは、スレッドを必要とするコードのこの種。私はasyncioイベントループを通してそれをスケジュールする際に作品の
import asyncio
def line_reader(f):
while True:
line = f.readline()
if not line:
yield from asyncio.sleep(POLL_INTERVAL)
continue
process_line(line)
この種が、process_data
ブロックならば、それはもちろんありません良いです。私はそれが少しasyncioともっと使えるように変更しました。始めたとき、私は解決策が
def process_data():
...
while True:
...
line = yield from line_reader()
...
ようになりますが、私は(少なくともない状態のかなりのビットを管理process_data
せずに)その仕事を作る方法を見つけ出すことができなかった想像しました。
この種のコードをどのように構造化するべきかについてのアイデアはありますか?
ファイルが変更されます。 – josteinb