Как обновлять GUI в многопоточном приложении?
Пытаюсь написать программу с multiprocessing и PyQt5. Процессы запускаются и работают, а окно приложения никак не реагирует. Не обновляются данные в окне. Также не работает кнопка выхода. Окно тупо повисает. Как можно обновить в нем данные, например вывести счетчик процессов? И сделать выход или паузу по кнопке.
class mywindow(QtWidgets.QMainWindow):
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.btnClicked)
self.ui.pushButton_2.clicked.connect(self.btn2Clicked)
def btn2Clicked(self):
sys.exit(app.exec()) # <=== Это не работает
def btnClicked(self):
with urllib.request.urlopen(url) as f:
proxy = f.read().decode('utf-8')
f.close()
proxy = json.loads(proxy)
proxy = proxy['data']
for i in proxy:
print(i['proxy'])
proxy_list.append(i)
proxy_list_len = len(proxy_list)
print(proxy_list_len)
cnt = 0
threads = 300
with Manager() as manager:
bad_proxy_list = manager.list()
good_proxy_list = manager.list()
processes = []
while cnt < proxy_list_len:
for i in range(threads):
p = Process(target=multi, args=(proxy_list[cnt], good_proxy_list, bad_proxy_list))
p.start()
processes.append(p)
cnt += 1
if cnt >= proxy_list_len:
break
print(cnt)
for p in processes:
print(p)
p.join()
self.ui.label_2.setText(str(cnt)) # <=== Это не работает