есть такой код:
        with futures.ThreadPoolExecutor(max_workers=max_threads) as executor:

future_to_url = {}
processId = 0
for link in links:
ft = executor.submit(worker, (processId, link, attr))
ft.add_done_callback(self.parent.threads.process_result)
future_to_url.update({ft:link})
processId += 1

for future in futures.as_completed(future_to_url, timeout=timeout):
url = future_to_url[future]
if future.exception() is not None:
print ('%r generated an exception: %s' % (url,
future.exception()))
else:
print ('result', future.result())
при работе потоков gui замирает и обновляется лишь когда все потоки закончат свою работу
в воркере есть вызовы для обновления gui и все делается через queue, который в главном потоке постоянно проверяется таймером
там же используется app.processEvents()


до этого я использовал многопоточность так:
        self.executor = ThreadPoolExecutor(max_workers=mt_cnf)

for i, job in enumerate(jobs):

future = self.executor.submit(self.worker, [i, job, attr])
future.add_done_callback(self.process_result)
self.pending.add(future)
и gui нормально обновлялся
как заставить gui обновляться?


вообще, второй способ тоже тупит, если к нему добавить блок
 for future in futures.as_completed(future_to_url, timeout=timeout):
но в нем у меня часто зависают потоки - поставил 100, 90 выполнилось и все встает колом
не знаю как избавиться от зависших потоков