0

痛苦地解决了多线程程序在打开文件和在一个线程中设置'close on exec'位和在另一个线程中调用 subprocess.Popen 之间存在竞争风险 - 这可能导致意外的句柄被传递给第二个孩子,在我看来,我需要用锁来保护这种访问(我知道可以从 subprocess.Popen 关闭所有句柄,但这可能有点过头了)。

那会安全吗?子进程将立即执行一个 shell,但我不确定 python 线程锁在这种情况下是如何表现的。

PS我知道linux有一个'close on exec'位用于打开,但我没有在linux上运行,无论如何,python tempfile(或至少是2.6)不使用该设施。

当然,理想情况下,python 会自己处理这种讨厌的事情,但我找不到任何暗示它可能的东西。

4

1 回答 1

1

听起来很安全。如果你这样做

with my_exec_lock:
    open_file()
    set_coe()

在一个线程中和

with my_exec_lock:
    popen()

另一方面,你应该是安全的。

但请注意,这样一来,第一个线程可能会被阻塞,直到popen()完成。

也许其他Threading机制之一可能更合适。

于 2012-06-26T09:04:10.067 回答