シンプルで複雑なAPIを使ってクラスを作成しています。このAPIの一部であるすべてのメソッドはコルーチンでなければなりません。コルーチンからPythonのコルーチンを呼び出す
このクラスの外から、私はまだコルーチンのようなメソッドを呼び出したいと思います。私は(それだけの単純な呼び出しのための時間を無駄にするような感じ)イベントループと背中にジャンプを防ぎたいので
x = MyClass()
loop = asyncio.get_event_loop()
result = loop.run_until_complete(x.simple1(42))
今私はsimple1
からawait
とsimple2
呼び出しを削除したいと思います。
これを行う方法はありますか?もちろん、すべての解決策は、await
のアプローチのオーバーヘッドを超えてはなりません。
この解決法は、「シンプル*」がコルーチンであり、別のプログラマーが「ブロッキング」コールだと考えることができますが、そうではありません。 – Qeek
@Qeek:** **はブロッキングコールです。 'complex()'の作業が完了するまで戻りません。 –
多分私は何かが間違って待っている。私がcoroutineを呼び出すと、イベントループが何らかの処理を待っている(たとえ、 'await coro()'と呼ばれる直前にパケットが到着した)場合でも、イベントループは常に私のコルーチンを直ちに処理するのでしょうか? – Qeek