SyntaxHigh

Monday, February 24, 2014

Python のスレッドがBlenderで動くか

複数のコントローラを動かすためにスレッドが必要だ。

なぜかというと、シリアル通信を並列にするため。ほかのことは並列じゃなくても十分早いが、シリアル通信だけは送信している間非常に時間がかかる(30msecとか)ので、二つのコントローラに順番に送っていると2倍かかってしまう。

なので、ここだけスレッドで並列にし、全部の仕事が終わるのを毎フレーム待つことにする. Pythonのthreadingを使えば簡単らしい。

そういえば、Blender上でthreadを使うときに何か問題があると読んだ記憶があって、調べてみた。

http://www.blender.org/documentation/blender_python_api_2_62_2/info_gotcha.html
これを読む限りは、スクリプト中で join()を使って待ってやれば大丈夫とのこと。今、1フレームの中でシリアル通信を複数のコントローラとの通信を行いたいわけだから、blender のModalTimerOperator の中の関数中でスレッドを動的に生成し、join()を使ってシリアル通信を待てばいいということになる。

帰ったら実験してみる。