@@ -287,6 +287,7 @@ def set_default_method(self, index):
287287 @Inputs .data
288288 @check_sql_input
289289 def set_data (self , data ):
290+ self .cancel ()
290291 self .closeContext ()
291292 self .varmodel [:] = []
292293 self ._variable_imputation_state = {} # type: VariableState
@@ -304,6 +305,7 @@ def set_data(self, data):
304305
305306 @Inputs .learner
306307 def set_learner (self , learner ):
308+ self .cancel ()
307309 self .learner = learner or self .default_learner
308310 imputer = self .create_imputer (Method .Model )
309311 button = self .default_button_group .button (Method .Model )
@@ -380,8 +382,8 @@ def impute_one(method, var, data):
380382 w .doneAll .connect (self .__commit_finish )
381383 w .progressChanged .connect (self .__progress_changed )
382384 self .__task = Task (futures , w )
383- self .progressBarInit (processEvents = False )
384- self .setBlocking (True )
385+ self .progressBarInit ()
386+ self .setInvalidated (True )
385387
386388 @Slot ()
387389 def __commit_finish (self ):
@@ -430,7 +432,7 @@ def create_data(attributes, class_vars):
430432 return None
431433
432434 self .__task = None
433- self .setBlocking (False )
435+ self .setInvalidated (False )
434436 self .progressBarFinished ()
435437
436438 attributes = []
@@ -458,18 +460,22 @@ def __progress_changed(self, n, d):
458460 self .progressBarSet (100. * n / d )
459461
460462 def cancel (self ):
463+ self .__cancel (wait = False )
464+
465+ def __cancel (self , wait = False ):
461466 if self .__task is not None :
462467 task , self .__task = self .__task , None
463468 task .cancel ()
464469 task .watcher .doneAll .disconnect (self .__commit_finish )
465470 task .watcher .progressChanged .disconnect (self .__progress_changed )
466- concurrent .futures .wait (task .futures )
467- task .watcher .flush ()
471+ if wait :
472+ concurrent .futures .wait (task .futures )
473+ task .watcher .flush ()
468474 self .progressBarFinished ()
469- self .setBlocking (False )
475+ self .setInvalidated (False )
470476
471477 def onDeleteWidget (self ):
472- self .cancel ( )
478+ self .__cancel ( wait = True )
473479 super ().onDeleteWidget ()
474480
475481 def send_report (self ):
0 commit comments