Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python停止正在运行的线程_Python_Multithreading - Fatal编程技术网

python停止正在运行的线程

python停止正在运行的线程,python,multithreading,Python,Multithreading,我知道这个问题被问了很多次,但我还是想知道 def startMonitor(self,event): selectedInterface = self.interfaces_cblist.GetValue() Publisher().sendMessage(("test"),selectedInterface) self.Close() selectInterfaceStr = str(selectedInterface) if len

我知道这个问题被问了很多次,但我还是想知道

def startMonitor(self,event):       
    selectedInterface = self.interfaces_cblist.GetValue()
    Publisher().sendMessage(("test"),selectedInterface) 
    self.Close()
    selectInterfaceStr = str(selectedInterface) 
    if len(selectedInterface) == 0:
        noSelect_error = wx.MessageDialog(None,"Please select an interface","",wx.OK|wx.ICON_ERROR)
        noSelect_error.ShowModal()
    else:       
        monitorStarted = wx.MessageDialog(None,"Monitor on %s started"%selectInterfaceStr,"",wx.OK|wx.ICON_ERROR)
        monitorStarted.ShowModal()
        self.monitorInterface_button.Disable()
        thread.start_new_thread(self.camtableDetection,(selectInterfaceStr,))
        thread.start_new_thread(self.dhcpexhaustion,(selectInterfaceStr,))

如何停止线程?

您可以使用一个stop方法来指定变量,例如self.abort。然后,在正在线程化的函数中,应定期检查此变量并停止该函数(使用return或类似方法)。下面是一个示例类,它使用此技术停止线程

class PymineLogger:
    def __init__(self):
        self.file = open('server.log', 'a')
        self.abort = False
        self.log_queue = Queue.Queue()
        threading.Thread(target=self.process_queue, args=()).start()

    def error(self, i):
        line = u'[%s] [ERROR] %s' % (str(time.time()), i)
        self.log_queue.put(line)

    def info(self, i):
        line = u'[%s] [INFO] %s' % (str(time.time()), i)
        self.log_queue.put(line)

    def process_queue(self):
        while not self.abort:
            try:
                log_line = self.log_queue.get(timeout=1)
                print log_line
                self.file.write("%s\n" % log_line)
                self.file.flush()
            except Queue.Empty:
                pass

    def stop(self):
        self.abort = True
stop方法分配变量self.abort,该变量由线程定期检查

class PymineLogger:
    def __init__(self):
        self.file = open('server.log', 'a')
        self.abort = False
        self.log_queue = Queue.Queue()
        threading.Thread(target=self.process_queue, args=()).start()

    def error(self, i):
        line = u'[%s] [ERROR] %s' % (str(time.time()), i)
        self.log_queue.put(line)

    def info(self, i):
        line = u'[%s] [INFO] %s' % (str(time.time()), i)
        self.log_queue.put(line)

    def process_queue(self):
        while not self.abort:
            try:
                log_line = self.log_queue.get(timeout=1)
                print log_line
                self.file.write("%s\n" % log_line)
                self.file.flush()
            except Queue.Empty:
                pass

    def stop(self):
        self.abort = True

类源:pymine2项目

这可能会有所帮助:你知道我如何用wxpython代替它吗?在哪里触发自我。abort@ku1918我以前从未用过wxPython。所以我不知道。