Python 扭曲多线程,信号处理

Python 扭曲多线程,信号处理,python,multithreading,twisted,Python,Multithreading,Twisted,我编写了一个twisted程序来处理来自TCP套接字和原始套接字的请求。 由于twisted不支持原始线程,我在一个名为“raw\u socket\u loop”的函数中编写了raw socket select poll循环。主reactor程序通过reactor.callInThread()函数创建一个单独的线程来运行此循环 我的问题是,我在控制台中单击control-C,但反应堆无法停止。我认为reactor的主线程接收到这个信号并且处理得很好,但是生成的线程没有接收到这个中断信号。是否有多

我编写了一个twisted程序来处理来自TCP套接字和原始套接字的请求。 由于twisted不支持原始线程,我在一个名为“raw\u socket\u loop”的函数中编写了raw socket select poll循环。主reactor程序通过reactor.callInThread()函数创建一个单独的线程来运行此循环

我的问题是,我在控制台中单击control-C,但反应堆无法停止。我认为reactor的主线程接收到这个信号并且处理得很好,但是生成的线程没有接收到这个中断信号。是否有多线程反应器程序的关闭建议


非常感谢,线程是不可中断的。您必须在线程中运行的代码中构建一个机制,以接收关闭通知并响应它退出

如果在线程中使用
select(2)
,则可以使用(Twisted本身就是这样做的,以满足自己的线程控制需要)


但是,如果你在一个线程中使用<代码>选择(2),那么也许你应该考虑不使用一个线程,而是用它来实现并使用它来获得它的准备事件。通过这种方式,您可以避免线程,让reactor实际实现事件循环,并且仍然可以获得原始套接字。

这太棒了!我实现了一个iReAddScriptor来从原始套接字读取数据,现在它工作得很好!非常感谢。找到了一个在Python中使用自管道技巧的非常好的示例