痛苦地解决了多线程程序中打开文件和在一个线程中设置'close on exec'位并在另一个线程中调用subprocess.Popen之间存在种族危险 - 这可能导致意外的句柄传递给第二个孩子,在我看来,我需要用一个锁保护这个访问(我知道关闭所有的句柄都可以从subprocess.Popen,但这可能是矫枉过正的。)
这样安全吗?子进程会立即执行一个shell,但我不确定python线程锁在这种情况下是如何表现的。
PS我知道linux有一个'close on exec'位用于打开,但是我没有在linux上运行,无论如何,python tempfile(或者至少是2.6)不使用该工具。当然,理想情况下,python本身就会处理这种恶意,但我找不到任何暗示它可能的东西。
答案 0 :(得分:1)
这听起来很安全。如果你这样做
with my_exec_lock:
open_file()
set_coe()
在一个帖子中
with my_exec_lock:
popen()
在另一方面,你应该是安全的。
但请注意,在popen()
完成之前,第一个帖子可能会被阻止。
也许其他Threading
机制之一可能更合适。