プログラム内で、モジュール等を使用しない限りシングルプロセス、シングルスレッドで動く。もしくは意識しないでいいレベルのマルチプロセス、マルチスレッドで動いている
ライブラリによってはマルチプロセス・マルチスレッドを使っている場合があり、それは格別です。
ではそのようなライブラリを使わないとどうなるか? というと、見た目にはシングルスレッド・シングルプロセスに見えると思います。とりあえずPythonレイヤではそうなります。
言語処理系の内部でまったく使っていないかどうかは別の話です。ややこしいことに、OSレベルで割り当てられる「スレッド」とPythonレベルの「スレッド」があり、両者はあまり一致しません。OSレベルの方は基本的にはPythonからは見えないように上手いこと実装してくれているので、無視することにしてください。
Pythonレイヤの「スレッド」にはGlobal Interpreter Lockなるものがあり、たとえば複数のスレッドで同じリストの要素に同時に代入しようとしてぶっ壊れて落ちる、といった事故を防いでくれています。この代償がよくいわれる「マルチスレッドで書いてもマルチコアを生かしてくれる訳ではない」です。
もちろんGILがあるからといっても、処理系がクラッシュして落ちたりオブジェクトの管理情報が滅茶苦茶になって訳わからん動きをしたりといったことにならないだけで、論理的な整合性まで担保してくれるわけではありません。必要であればthreading
で実装されているロックやセマフォで適切な排他制御を行わなければなりません。
とはいえ、プログラムを書く側の認識としては概ね「モジュール等を使用しない限りシングルプロセス、シングルスレッドで動く」でいいと思います。何もしなければforkしないで逐次実行されるシングルスレッドのプログラムみたいに動くでしょう。
(と言っても、フレームワーク使うとコードはそんな風に見えないのにasyncioで動いてマルチスレッドずる、みたいなのもあり得る訳ですが、それもまた別の話)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/13 23:07
2020/05/13 23:08
2020/05/14 05:45
2020/05/14 19:14