选择在线程中生成子进程后导致主线程死锁

时间:2016-04-27 22:15:26

标签: python multithreading select signals

我目前遇到运行子流程的线程有问题。该程序使用主线程来处理来自OS的信号,例如, SIGINT,SIGTERM等。它还会旋转其他在后台运行进程的线程。但是,如果主线程在signal.pause()处于休眠状态,并且后台线程运行子进程然后选择文件描述符,则会导致主线程立即死锁。任何向程序发送捕获信号的尝试都不会触发任何相应的处理程序。

这个问题似乎只发生在OS X上,使用捆绑版本的python 2.7或使用从源代码编译的2.7。我已经使用python 2.7在Ubuntu linux上测试了这个问题,并且还没有能够重现这个问题。我还在OS X上的python 3.5中测试了这个,并且能够重现这个问题。

以下是可用于重现行为的代码段:

import threading
import os
import signal
import select


def run():
    ping_r = os.pipe()[0]
    os.system('touch /tmp/blah')
    select.select([ping_r], [], [])

t = threading.Thread(target=run)
t.start()
signal.pause()

是否有某些我不知道/忘记在python中设置导致此问题的内容?

0 个答案:

没有答案