Webインターフェイスで制御できるバックグラウンド処理デーモンがあるとします。複数のrun_foreverハンドラを同時に管理するにはどうすればいいですか?
このように、このアプリケーションは、要求の処理に責任を負うメソッドと、要求の状態に関係なく、時々繰り返し呼び出される必要がある特別なメソッドを持つオブジェクトです。
aiohttp
を使用している場合、Web部分はかなり簡単です。アプリケーションインスタンスをインスタンス化し、aiohttp.web.run_app
ソースごとに設定するだけです。すべてが明確です。それは明らかに、ブロックあなたはloop.run_until_complete(app.process())
を呼び出すことができます。このアプローチでは
async def process(self):
while self._is_running:
await self._process_single_job()
、しかし、ひいては設定する機会を残さない:それでは、あなたのアプリケーションインスタンスが特別な方法は、そのように構成された、app.process
それを呼び出すことを持っているとしましょうウェブ部分。確かに、私はこれら2つの責任を別々のプロセスに分割し、データベースを使ってコミュニケーションを確立することができましたが、それは事態を複雑にする可能性があるので、この方法を避けることをお勧めします。
ウェブアプリケーションを実行しているときにイベントループが何らかのメソッドを繰り返し呼び出すようにするにはどうすればよいですか?