質問: 今考えている構成は次のようなものです。 --- Pythonを実行している時に、threadingモジュールで2スレッドに分けます。 1. 一つ目のスレッドでは、subprocessモジュールによってjavascriptファイルを実行します。 この実行中のjavascript(node.js)では、blenoというモジュールを用いて、bluetooth peripheralとして動作させます。 2. 二つ目のスレッドでは、通常のPythonスクリプトが実行されています。例えば、Raspiの純正カメラの制御などを行います。 さらに、こちらはサーバーとして動作させます。一つ目のスレッドのjavascriptの要求に応じて、写真を取得したり、測定時間を返したりします。これはjQueryやAjaxを使うのが有効であるようです。 ![画像の説明をここに入力](https://i.stack.imgur.com/iJ0nH.jpg) --- 上述のような構成で可能なのかどうか、他にうまいやり方があるかどうか、と言った内容についてご回答いただければ幸いです。 --- 追記: --- blenoをわざわざ使う理由(bluezやpybluezなどではなく)は、blenoのインターフェイスが非常に分かりやすいからです。サービスやキャラクタリスティックとしての実装が簡単です。
回答: > > 一つのCPUで、2つの動作を行いながら、それらの間でやりとりをしたいと考えています。 > > 実際にそのようなことは可能でしょうか? > > > 可能です。 モダンなオペレーティング・システムは何らかのマルチタスキング機構を備えているため、単一CPUであっても複数タスクを並行に処理することが出来ます。 * マルチプロセス:OS上で複数のプロセス(process)を同時稼動させる方式。プロセス間の結合度は低く、データ共有にはプロセス間通信(IPC; Inter Process Communication)機構が必要。 * マルチスレッド:単一プロセス内に、複数のスレッド(thread)を同時稼動させる方式。スレッド間の結合度は高く、同一メモリ空間を共有するため特別な通信機構は不用。 > > 一つ目のスレッドでは、subprocessモジュールによってjavascriptファイルを実行します。 > > 二つ目のスレッドでは、通常のPythonスクリプトが実行されています。 > > > ただし、その実現手段としてPythonのthreadingモジュール(マルチスレッド)が好ましいかといえば、質問中にある要件に対しては「適切でない」と考えます。 * **前提:**「マルチスレッド」よりも「マルチプロセス」の方がプログラミングモデルが単純であり、並行処理プログラム特有の難解さ・困難さが抑えられます。 * 本質的にはJavaScriptスクリプトとPythonスクリプト間の連携ですから、それぞれのインタプリタ(Node.js, CPython)プロセスを立ち上げる単純な「マルチプロセス」並行処理で十分です。 * スクリプト間でのローカル通信による"疎な"連携を想定しているようようですから、分離独立性の高い「マルチプロセス」並行処理で十分です。