3

os.spawnlePython で長時間実行されるバックグラウンド プロセスを作成する予定ですが、使用するかスレッド化するかはまだわかりません。私はそれについて読んだだけなので、スポーンまたはスレッドの経験はあまりありません。どちらをいつ使用するかの経験則はありますか?

ありがとうございます

4

2 に答える 2

4

Global Interpreter Lockを考慮してください。長時間実行されるプロセスが CPU を集中的に使用する場合は、おそらくそれを独立したプロセスにする必要があります。一方、ブロックに多くの時間を費やす場合は、GIL はそれほど大した問題ではなく、スレッド化しても問題ありません。

また、提供するものが特に必要ない場合は、標準ライブラリのmultiprocessingパッケージos.spawnleの使用を検討して ください。これは、 threadingパッケージと同様のインターフェースを提供し、手動でスポーンおよび追跡プロセスをいじるよりもずっと簡単に使用できます。

于 2010-09-15T02:35:07.650 に答える
2

明らかな違いは、os.spawnleのプログラムを実行する別のプロセスを開始するために使用されるのに対し、スレッドは同じプログラムの一部であるコードを実行することです。実際、バックグラウンド プロセスが既に存在する他のプログラムである場合、(または別のプロセスを作成する他の手段) が唯一の選択肢です。プログラム内の 2 つのスレッドは、同じプログラムを実行する必要があります。os.spawnle

独自のコードを個別のプロセスまたは個別のスレッドとして実行するように構成する必要があるかどうか疑問に思っている場合は、このようなプロセスとスレッドの質問のいくつかを見て、実行しようとしていることにどちらが適しているかを判断してください。特に、プロセス/スレッドが共有する必要があるリソース、相互に通信するもの、およびそれぞれがどの程度堅牢である必要があるかを検討してください。たとえば、スレッドがクラッシュすると、プロセスの残りの部分がダウンします。

于 2010-09-14T23:29:40.230 に答える