无法阻止模块中的线程

时间:2016-07-24 10:02:36

标签: python multithreading class web2py python-module

我需要能够调用正在运行的线程的停止功能。我尝试了几种方法来实现这一点,但到目前为止没有运气。我想我需要一个线程ID,但不知道这是怎么做的。

相关代码: 模型:

import MODULE
class do_it():
    def __init__(self):
        self.on_pushButton_start_clicked()
        return

    def on_pushButton_start_clicked(self):
        self.Contr = MODULE.Controller()
        self.Contr.start()

    def on_pushButton_stop_clicked(self):
        if self.Contr:
            self.Contr.stop()
            self.Contr = None
        return

模块:

import thread
class Controller():
    def __init__(self):
        self.runme = False

    def start(self):
        """Using this to start the controllers eventloop."""
        thread.start_new_thread(self._run, ())

    def stop(self):
        """Using this to stop the eventloop."""
        self.runme = False

    def _run(self):
        """The actual eventloop"""
        self.runme = True

我认为我的问题在于...... 我的控制员:

    """I want to use this to control my model, that in turn controls the module"""

    def start_module():
        start=do_it().on_pushButton_start_clicked()
    return 'Ran start function'

    def stop_module():
        stop=do_it().on_pushButton_stop_clicked()
    return 'Ran stop function'

1 个答案:

答案 0 :(得分:0)

关于thread模块,这是文档所说的:

  

此模块提供用于处理多个的低级基元   线程[...] threading模块提供了更易于使用的功能   在此模块之上构建的更高级别的线程API。

此外,一旦线程启动,就无法停止或终止线程。 This这个问题更详细,并展示了如何使用threading.Event来实现可停止的线程。

唯一的区别是daemon thread,当您的主程序存在时会自动终止。