スレッド関数であるかのようにプログラムから関数を実行しているためmultiprocessing
、プロセスの状態の完全なコピーが必要です。ということfork()
です。
によって提供されるより高いレベルのインターフェイスを使用する方multiprocessing
が一般的に優れています。fork()
少なくとも、リターン コードを自分で気にする必要はありません。
os.fork()
すぐに使用できるサービスが少ない低レベルの関数ですが、コードmultiprocessing
の部分的な再実装を犠牲にして、使用されるものすべてに使用できmultiprocessing
ます。だから、私はmultiprocessing
あなたのために大丈夫だと思います。
ただし、プロセスのメモリ フットプリントが大きすぎて複製できない場合 (または、フォークを回避する他の理由がある場合 (データベースへの接続を開く、ログ ファイルを開くなど)、実行する関数を作成する必要がある場合があります)。新しいプロセス 別の python プログラム。次に、 を使用して実行しsubprocess
、パラメータを に渡しstdin
、キャプチャしstdout
、出力を解析して結果を取得できます。
UPD: os.exec...
関数ファミリーは、プロセスを生成されたプロセスに置き換えるため、ほとんどの目的で使用するのが困難です (実行中のプログラムと同じプログラムを実行すると、メモリ内データを保持せずに最初から再起動します)。ただし、親プロセスの実行を継続する必要が本当にない場合はexec()
、多少役立つ場合があります。
私の個人的な経験から: os.fork()
Unix でデーモン プロセスを作成するために頻繁に使用されます。私はよく使用しますsubprocess
(通信は標準入力/標準出力を介して行われます)。マルチプロセッシングを使用したことはほとんどありません。私が必要としたのは私の人生で一度もありませんos.exec...()
。