在调用subprocess.popen之后python中线程锁的状态是什么

时间:2012-06-26 08:43:40

标签: python multithreading multiprocessing

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

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

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

当然,理想情况下,python本身就会处理这种恶意,但我找不到任何暗示它可能的东西。

1 个答案:

答案 0 :(得分:1)

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

with my_exec_lock:
    open_file()
    set_coe()

在一个帖子中

with my_exec_lock:
    popen()

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

但请注意,在popen()完成之前,第一个帖子可能会被阻止。

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