Pythonのマルチスレッドとマルチプロセス

Python学習【365日チャレンジ!】203日目のマスターU(@Udemy11)です。

9月になって少しは過ごしやすくなるのかと思いきや、まだまだ暑い日が続いています。

朝晩はかなり過ごしやすくなりましたが、日中に太陽の下で作業する場合は熱中症の危険がありますので、しっかりと水分と休憩を取る必要があります。

また、室内でも熱中症のリスクがありますので、電気代がもったいないからといってエアコンを付けないで過ごすのはやめましょう。

電気代をケチったばかりに死神に命の代償を支払わされる羽目になりますよ。

それでは、今日もPython学習をはじめましょう。

昨日までの復習

昨日までは、テストについて学習してきました。

unittestから始まって、pytestやselenium、主に外部サービスから取得する値を擬似的に代入してテストができるmockを集中的に学習しました。

実際のテストは、プログラムにあったより具体的なコードが必要になりますが、簡易なコードを書いてテストを実行してみました。

mockを使ったモックオブジェクトライブラリは、これまでに学習したコードに加え、かなりたくさんの使い方ができますので、必要に応じて公式ドキュメントを活用して実践していくことがベストです。

テストについては、これまでの記事を参考にしてみてください。

今日から新しいセクション、並列化について学習していきます。

並行処理と並列処理

プログラムの処理には並行処理と並列処理がありますが、次のような違いがあります。

並行処理とは

一つのCPUができる処理は一つなので、スレッドやプロセスを切り替えながら複数のアプリの処理を行いますが、一つのCPUが複数の処理を順番に行うのが並行処理です。

並列処理とは

二つ以上のCPUが、切り分けたスレッドやプロセスを同時進行で処理するのが並列処理です。

わかりやすくたとえると、並行処理が料理人が一人だけのレストランで、並列処理が料理人がたくさんいるレストランの違いみたいな感じ。

料理人が一人でも、作業をうまく切り分けて順序よく調理を進められますが、そんな料理人がもう一人いれば、同時進行で料理ができるので、もっと作業がはかどりますよね。

次にスレッドとプロセスについて調べてみました。

スレッドとは

スレッドは、プロセスの中で並列処理をするための単位で、1つのプロセスの中に複数のスレッドが動作するマルチスレッドと、1つのプロセスに一つのスレッドが動作するシングルスレッドがあります。

マルチスレッドは、プロセスに割り当てられたメモリを共有して動作しているので、メモリを共有しないプロセスより処理速度は速くなりますが、意図しないデータの書き換えが発生するリスクもあるので、バグが発生しないようなプログラムを意識する必要があります。

プロセスとは

プロセスはアプリケーションのリソースを保存する機能とアプリケーションの命令を実行する機能を持っています。

一つのプロセスを実行中に他のプロセスを作動させるマルチプロセスは、作業が中断した状態を保存して、再度呼び出されたときにすぐに実行状態にできるようにしています。

この保存された状態をコンテキストといいますが、コンテキストを適切なタイミングで保存・復帰することでマルチプロセスを実現しています。

また、プロセス間のメモリは、スレッドのように共有することがありませんので、当然ですが、マルチスレッドよりもメモリのリソースを消費します。

プロセス同士がメモリを共有していないため、一つのプロセスがクラッシュしても他のプロセスに影響を与えませんが、マルチスレッドに比べるとマルチプロセスは処理速度が遅くなります。

マルチスレッドとマルチプロセスについては、こちらの記事が参考になります。

実践が重要

いろいろな知識を学習することは大切ですが、インプットするばかりではスキルは身につきません。

英会話でリーディングの勉強ばかりしてもスピーキングができないのと一緒です。

知識は実践して初めて自分のものにすることができるので、何かを学習したら、常に実践するようにしましょう。

と言いつつ、今日はマルチスレッドとマルチプロセス、並列処理についての概念を学習しただけなので、明日からは実践していきたいと思います。

それでは、明日もGood Python!