我已经问过很多次类似的问题,但仍然找不到合适的解决方案。
我有外部功能,在某些情况下可以运行很长时间。我想在 30 秒后打断它。
我该怎么做?
- 线程很好,但我无法阻止它们(我无权访问外部函数的代码)
- 多处理也不是一个选项,因为我在 mod_wsgi 下运行网站。
有什么可靠的方法可以停止线程吗? 也许使用 os.system 或 os.kill。如果是,那么如何?
外部函数只执行一些计算,没有网络连接或文件打开。所以,我只需要停止进程并进行清理。
我的代码(实际上是从某个来源获取的):
def time_limit(timeout):
def internal(function):
def internal2(*args, **kw):
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.result = None
self.error = None
def run(self):
try:
self.result = function(*args, **kw) # this is external
except Exception as e:
self.error = e
def _stop(self):
if self.isAlive():
threading.Thread._Thread__stop(self)
c = MyThread()
c.start()
c.join(timeout)
counter = 0
if c.isAlive():
c._stop()
raise TimeoutException
if c.error:
raise c.error
return c.result
return internal2
return internal
最佳答案
你不能杀死线程,但你可以杀死一个进程。如果可以使用进程而不是线程,则可以使用 multithreading module .进程可以terminated来自父应用程序。
如果您更详细地描述您的任务,也许我可以提供更多帮助。
关于python - 使用 os 杀死 python 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28633357/