1

私は、異なるスレッド (クライアントごとに 1 つのスレッドなど) を使用する Python ベースの ERP である OpenERP を使用しています。multiprocessing.Process() を fork() に使用して、長時間実行されるメソッドを呼び出したいと思います。

私の質問は次のとおりです。親のスレッドはどうなりますか? それらはコピーされ、引き続き実行されますか? 子プロセスはサーバー ソケットで accept() を呼び出しますか?

ご回答ありがとうございます。

4

1 に答える 1

3

フォークはスレッドをコピーせず、メインのスレッドのみをコピーします。そのため、マルチスレッド アプリケーションをフォークすると、予期しない副作用が発生する可能性があるため (たとえば、いくつかのスレッドがミューテックス クリティカル セクションで実行されている間にフォークが発生した場合)、フォークされたプロセスで実際に何かが壊れる可能性があるため、非常に注意してください理想的には分岐します。

上で述べたことはすべて真実ですが、プロセスがフォークされたときにコールバックとして機能する pthread_atfork() という回避策 (少なくとも Linux では) があります (必要なすべてのスレッドを再作成できます)。C アプリケーションには適用されますが、Python アプリケーションには適用されません。

詳細については、次を参照してください。

于 2012-10-10T13:18:30.427 に答える