在多线程环境中杀死Python中的挂起函数

时间:2012-01-16 14:12:11

标签: python multithreading cython cpython

我想杀死一个执行为long的函数。重要的是这个函数是C扩展中的(包含在Cython中),我希望这个解决方案能够在多线程环境中工作。因为它是用Cython包装的,所以这个线程可以保存GIL。

我无法控制此扩展程序内发生的事情(我认为此代码不会响应中断)。

我很确定这段代码只能在Unix机器上运行。但问题Python kill hanging function不适用,因为我认为信号在多线程环境中不起作用(AFAIK未定义哪个线程会捕获它们)---但我可能在这个问题上错了:)所以纠正我。 / p>

有没有办法让我在不产生新进程的情况下解决这个问题。

1 个答案:

答案 0 :(得分:1)

我的解决方案是将此函数包装在另一个python进程中,如果需要,可以杀死该进程。

对于搜索这个问题的任何人的一条建议:由于进程启动时间(启动解释器,加载模块然后将数据加载到内存中)可能需要持续几秒钟才能对函数调用进行分组,因此这种开销会赢得; t kill你(所以真的没有可重用的解决方案)。

示例解决方案,已发布到另一个问题:How to interrupt native extension code without killing the interpreter?

相关问题