0

マルチスレッド プログラムでは、あるスレッドでファイルを開いて 'close on exec' ビットを設定し、別のスレッドで subprocess.Popen を呼び出す間に競合の危険性があることを痛感しました。予期しないハンドルが渡される可能性があります。 2 番目の子、このアクセスをロックで保護する必要があるように思えます (subprocess.Popen からすべてのハンドルを閉じることができることはわかっていますが、それはやり過ぎかもしれません)。

それは安全になるでしょうか?サブプロセスはすぐにシェルを実行しようとしていますが、そのような状況で Python スレッド ロックがどのように動作するかはわかりません。

PS Linuxには開くための「execで閉じる」ビットがあることは知っていますが、Linuxで実行していません。とにかく、python一時ファイル(または少なくとも2.6のもの)はその機能を使用していません。

もちろん、理想的には、pythonはその不快感自体に対処しますが、それを示唆するものは何も見つかりません.

4

1 に答える 1

1

それはかなり安全に聞こえます。もしあなたがそうするなら

with my_exec_lock:
    open_file()
    set_coe()

1 つのスレッドで

with my_exec_lock:
    popen()

他の場合は、安全であるべきです。

ただし、1 番目のスレッドpopen()は が終了するまでブロックされる可能性があることに注意してください。

おそらく、他のThreadingメカニズムの 1 つがより適切である可能性があります。

于 2012-06-26T09:04:10.067 に答える