asyncore同じをdbus介して統合することは可能main loopですか?
通常、DBus の統合はglibメイン ループを介して行われます。asyncoreこのメイン ループを統合するか、dbus を使用することは可能asyncoreですか?
asyncore最悪。glibすでに非同期のものを提供しているので、glibの mainloop を使用してすべてを実行してください。
私は、自分のプロジェクトの1 つに簡単なGSourceラッパーを書きました。AsyncoreGSource
適切な に添付するだけMainContextです:
source = AsyncoreGSource([socket_map])
source.attach([main_context])
当然のことながら、デフォルトはそれぞれasyncore.socket_mapとデフォルトMainContextです。
monkey-patchingasyncore.socket_mapをGSource試すこともできます。これは、 .
おそらく完全に合理的な答えが得られましたが、別のアプローチがあります-asyncoreのループ自体を使用する必要はありません。asyncore.loop を 0 のタイムアウトと 1 のカウントで呼び出すだけで、反復が停止し (したがって、関数名が完全に誤解を招きやすくなります)、ソケットが 1 回だけポーリングされます。必要に応じてこれを呼び出します。
glib の非同期サポートについては何も知りませんが、スレッドが必要な場合は、select または poll を使用し、追加のスレッドを生成する必要がないため、この方法で asyncore を使用することでパフォーマンスが向上する可能性があります。