【发布时间】:2011-10-20 07:07:19
【问题描述】:
我在网上查找了一些 SO 讨论和 ActiveState 配方,用于运行一些超时的代码。看起来有一些常见的方法:
- 使用运行代码的线程,
join超时。如果超时 - 杀死线程。这在 Python 中不直接支持(使用私有_Thread__stop函数),所以这是不好的做法 - 使用
signal.SIGALRM- 但这种方法不适用于 Windows! - 使用超时的子进程 - 但这太重了 - 如果我想经常启动可中断的任务怎么办,我不想为每个进程触发!
那么,什么是正确的方法?我不是在问解决方法(例如使用 Twisted 和异步 IO),而是解决实际问题的实际方法 - 我有一些功能,我只想在超时的情况下运行它。如果超时,我想要控制权。我希望它可以在 Linux 和 Windows 上运行。
【问题讨论】:
-
杀死代码是一种不好的做法,但如果你想这样做,线程是最好的方法。
-
我假设您不能修改相关代码?
-
你能准确地说出你在做什么吗?你运行的代码是做什么的?
-
没有正确的方法,这取决于你要打断什么,它保持什么共享状态等等。
-
这取决于你的算法,如果它是迭代的,你可以让出控制权,如果是 IO,你可以
select等等...
标签: python windows multithreading timeout