Pythonで複数の関数を物理的に(本当に)『同時に』実行させたいですけれども、
可能であれば、もっとも一般的なやり方を教えてください。
よろしくお願いいたします。
もっとも一般的なやり方。
https://docs.python.org/ja/3/library/asyncio.html
完全な同時は無理だと思います。どうしてもやるなら並列処理で調べればいいと思います。
処理時間を測定したいだけならdatetimeをそれぞれの関数の間に挟んであげればいいだけです。
どういうことがしたくてその質問をしたのか、ってのを説明しよう。
同時に、というのがどういう解釈かによって答えは変わろうかとおもいます
> どういうことがしたくてその質問をしたのか
一つの部品の上に同じパーツが幾つかあります。
各パーツの検査時間が同じなので、これらのパーツ検査は厳密に同時に行われれば、検査時間が短縮でき、検査ラインの稼働能率が数倍アップできますね。 『CPUタイムシェアリング』的な『同時』であれば、検査全体時間が短縮できないので意味がありません。
関数が仮に同時に動いてもハードやドライバの制限があるでしょう。
場合によっても問題になりますね。
純粋な計算ソフトなので、ハードディスクアクセスの衝突以外考えなくても大丈夫です。
《もっとも一般的なやり方》ありがとうございます。
Python にスレッド以上のリアルタイム性を求めるのは無理があります。複数の CPU や GPU を同時に動かせるよう、アセンブラを使ってください。全部アセンブラで書かなくても、クリティカルな部分だけ書いて Python から呼び出せばいいでしょう。
自分で作るのが難しければ、プロに有料で頼むのが良いと思います。
python側でどんなにガンバって並列化しても、どのCPUコアにどのスレッドをいつ割り当てるのかはOS次第なので、
> 物理的に(本当に)『同時に』実行
を「確実に」行うのは、Windowsとかの汎用OSでは無理だと思います
https://monoist.itmedia.co.jp/mn/spv/1105/23/news003.html
とかで解説されてるマルチコア対応リアルタイムOSを使って、
コア数≧タスク数
の場合に各コアに一つずつタスクを割り当てたら、「本当に同時に実行」が「確実に」できるかもしれませんが、そういう開発をやった経験が無いので、タスク起動のタイミングのバラツキが無視できるくらい小さいのか、とかよく分かりません
回答2件
あなたの回答
tips
プレビュー