python中的信号处理不适用于多线程程序

python中的信号处理不适用于多线程程序,python,multithreading,process,signals,Python,Multithreading,Process,Signals,我有一个多线程程序,其流程如下: 主程序: 清理代码: 我面临着清理工作的问题。当我调用主程序并抛出异常时,信号被正确发送,主程序获得SIGINT,但所有子线程都没有正确终止。我犯了什么错误。我应该改用SIGTERM吗?这有助于杀死所有子线程和派生的子进程吗?您所说的“子线程未正确终止”是什么意思?子线程创建的文件或目录仍在使用中,我无法删除它们。您希望SIGINT自动终止正在运行的线程,以便它们在清理功能运行之前停止运行?是。因为在监听信号时的some_函数()中,我正在迭代生成的进程,并使用

我有一个多线程程序,其流程如下:

主程序: 清理代码:
我面临着清理工作的问题。当我调用主程序并抛出异常时,信号被正确发送,主程序获得SIGINT,但所有子线程都没有正确终止。我犯了什么错误。我应该改用SIGTERM吗?这有助于杀死所有子线程和派生的子进程吗?

您所说的“子线程未正确终止”是什么意思?子线程创建的文件或目录仍在使用中,我无法删除它们。您希望SIGINT自动终止正在运行的线程,以便它们在清理功能运行之前停止运行?是。因为在监听信号时的some_函数()中,我正在迭代生成的进程,并使用terminate()终止它们,我在这里感觉到明显的混乱。这个问题讨论的是线程,但现在您讨论的是持有资源的进程。这两者——特别是在python中——是根本不同的。如果使用进程:
terminate()
只是发出终止信号,它不会等待终止。使用
join()
等待实际终止。
#Listen to the signal
signal.signal(signal.SIGINT, some_function)

#Actual logic by calling some other function, which spawns multiple threads
try:
   core_logic()  <--- any exception here will invoke the cleanup_function()
except:
   cleanup_function()
def some_function():
    #kill the states of the sub-threads generated by main core_logic()
    os.kill(processid, sigint)
def cleanup_function():
    #send a kill to the main program using os.getpid()