3

私は非常に怠け者であることを認めます。私はこれをかなり迅速に行う必要があり、Python3 asyncio モジュールについて理解できません。(面白いことに、ブースト 1 はかなり直感的であることがわかりました。)

時々ブロックするファイル オブジェクト (パイプ) を readline する必要があります。この間、ファイルから読み取るものがあるかどうかに関係なく、設定された間隔 (たとえば 30 分ごと) で別のアクティビティを起動できるようにしたいと考えています。

python3 asyncioを使用してこれを行うためのスケルトンを手伝ってくれる人はいますか? (twisted などのサードパーティ製モジュールをインストールできません。)

4

1 に答える 1

5

asyncio (および twisted や tornado などの他の非同期ライブラリ) は、ファイルのノンブロッキング IO をサポートしていません。ソケットとパイプのみが非同期で処理されます。

主な理由は次のとおりです。Unix システムには、ファイルを処理する適切な方法がありません。たとえば、Linux では、ファイルの読み取りによって操作がブロックされます。

https://groups.google.com/forum/#!topic/python-tulip/MvpkQeetWZAも参照してください

アップデート。

定期的な活動をスケジュールするには、次を使用すると思いますasyncio.Task

@asyncio.coroutine
def periodic(reader, delay):
    data = yield from reader.read_exactly(100)  # read 100 bytes
    yield from asyncio.sleep(delay)

task = asyncio.Task(reader, 30*60)

スニペットreaderasyncio.StreamReaderインスタンスであると想定しています。

于 2014-11-14T07:30:22.677 に答える