python - 使用 os 杀死 python 线程

标签 python linux multithreading

我已经问过很多次类似的问题,但仍然找不到合适的解决方案。

我有外部功能,在某些情况下可以运行很长时间。我想在 30 秒后打断它。

我该怎么做?

  1. 线程很好,但我无法阻止它们(我无权访问外部函数的代码)
  2. 多处理也不是一个选项,因为我在 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/

相关文章:

python - 比较两个 CSV 文件之间的值并写入第三个 CSV 文件

python - 改变表 Sqlite : how to check if a column exists before alter the table?

python [:-1] vs remove

python - 尝试使用未初始化的值InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x

c - 如何检测 Linux 中符号链接(symbolic link)目录中的一个文件是否被修改

c# - C# 中锁的过度使用

c# - 是否需要锁定此实例方法

java - 我可以可靠地使用 os.version 值来确定 Linux 发行版吗?

linux - 如何将参数传递给作业并以并行方式保持不变

Linux 每个进程的资源限制——一个深奥的 Red Hat 之谜