[pygtk] Killing or terminating thread in PyGTK
Petr Hracek
phracek at redhat.com
Fri Jul 19 18:59:41 WST 2013
Sorry I meant thread of course.
On 07/19/2013 12:46 PM, Petr Hracek wrote:
> Hi folks,
>
> my threads is running well.
> But I would like to implement terminating of thread. I have two
> approaches
> but any of these is not working properly till now.
>
> First approach:
> 1) class contain function: run_function()
> 2) over button I call:
> self.thread = threading.Thread(target=self.run_function()
> self.stop = threading.Event()
> 3) over stop button I would like to cancel thread. In that function is
> written:
> if self.thread.isAlive():
> self.stop.set()
> self.thread.join()
> This approach unfortunatelly does not work.
>
> Second approach:
> class DevAssistantThread(threading.Thread):
> def __init__(self, target = None):
> threading.Thread.__init__(self)
> self._terminate = False
> self.target = target
> self.stop = threading.Event()
>
> def terminate(self):
> print "terminate is called"
> self._terminate = True
> self.stop.set()
> print "terminate is finished"
>
> def run(self):
> print "Function was run"
> self.target()
> print "Function was finished"
> while True:
> if self._terminate:
> print "Thread is canceled"
> break
>
> class runWindow(object):
> def __init__(self, parent, finalWindow, builder, assistant):
> self.thread = DevAssistantThread(target=self.devassistant_start)
>
> # Thread is started during the opening window
> def open_window(self, widget, data=None):
> dirname, projectname = self.parent.pathWindow.get_data()
> self.runWindow.show_all()
> self.cancelBtn.set_sensitive(False)
> self.thread.start()
> self.cancelBtn.set_sensitive(True)
>
> # Function for cancelling thread
> def close_btn(self, widget, data=None):
> name = self.cancelBtn.get_label()
> if name == "Cancel":
> print self.thread.isAlive()
> if self.thread.isAlive():
> Gdk.threads_enter()
> self.stop.set()
> self.thread.join()
> Gdk.threads_leave()
> Gtk.main_quit()
> else:
> print "Quit dialog"
> Gtk.main_quit()
> def devassistant_start(self):
> logger_gui.info("Thread run")
> path =
> self.assistant.get_selected_subassistant_path(**self.parent.kwargs)
> pr = path_runner.PathRunner(path, self.parent.kwargs)
> try:
> pr.run()
> Gdk.threads_enter()
> self.cancelBtn.set_label("Close")
> Gdk.threads_leave()
> except exceptions.ExecutionException as ex:
> pass
>
> Unfortunatelly also second approach is not working well. Respectivelli
> it does not work at all.
>
> Do you have any idea where I have made mistake?
>
> Thank you in advance
>
--
Best regards / S pozdravem
Petr Hracek
More information about the pygtk
mailing list