Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » pyqt и многопоточность - не обновляется gui [RSS Feed]

#1 Март 31, 2011 22:11:45

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

pyqt и многопоточность - не обновляется gui

есть такой код:

        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 выполнилось и все встает колом
не знаю как избавиться от зависших потоков



Отредактировано (Март 31, 2011 22:30:41)

Офлайн

  • Начало
  • » GUI
  • » pyqt и многопоточность - не обновляется gui[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version