Странное поведение requests в pyqt5 в связке с socketserver.TCPServer
Есть очень простой код клиента
import sys, requests
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtWidgets, QtGui, QtCore
from ui import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btnStart.clicked.connect(self.on_btnStart_clicked)
def on_btnStart_clicked(self): #обработчик нажатия
r = requests.post("http://localhost:8080", data='dl_')
app = QApplication(sys.argv)
calc = MainWindow()
calc.show()
sys.exit(app.exec_())
и сервера
import socketserver
from http.server import BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def do_POST(self):
self.send_response(200)
self.end_headers()
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length).decode() #получаем данные
print(body)
def main():
with socketserver.TCPServer(("", 8080), Handler) as httpd:
print("server has been started")
httpd.serve_forever()
main()
GUI И нужно по нажатии на кнопку осуществить requests.post() - запрос к серверу и все в порядке. Но почему-то по окончании requests.post()-запроса (и отлавливании его в do_POST()-метода на сервере) сразу идет выполнение строки sys.exit(app.exec_()) на клиенте и СТРОКА requests.post() выполняется СНОВА!!!! и так три раза подряд!! Почему так? запрос успешен, зачем тогда появляется этот цикл, и сервер вынужден трижды принимать одно и тоже! Проверял и на винде и на мак ос. Как исправить странную ситуацию?
Ответы (1 шт):
нужно открыть сгенерированный файл интерфейса с классом Ui_MainWindow(object), и удалить строку QtCore.QMetaObject.connectSlotsByName(MainWindow)