SWIGで既存のC++ライブラリlive555をラップする(具体的にはRTSPクライアントインターフェイスをラップする)Python拡張機能を作成しました。拡張機能はシングルスレッドで操作されている場合は機能しますが、ライブラリのイベントループ関数を呼び出すとすぐに、Pythonインタープリターが制御を取り戻すことはありません。したがってthreading.Timer
、イベントループを呼び出す直前を使用してスケジュールされたタスクを作成した場合、イベントループが開始されると、そのタスクは実行されません。この問題を修正するために、すべての関数呼び出しの周りにSWIG自動生成ラッパーcxxファイルにマクロを手動で追加Py_BEGIN_ALLOW_THREADS
しました。しかし、今は、SWIGがコード自体を生成するときに同じことを実行し(つまり、スレッドを許可し)、コードを手動で変更しないようにします。SWIGで似たようなことをした人はいますか?Py_END_ALLOW_THREADS
doEventLoop()
PS-これを機能させるには、他のフレームワーク(SIPなど)に切り替えることも検討します。SWIGインターフェイスの作成は非常に簡単で、既存のヘッダーファイルをインクルードするだけでよいため、他のテクノロジよりもSWIGを選択しました。