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 を使用することでパフォーマンスが向上する可能性があります。