python pyqt5 多线程

问题遇到的现象和发生背景

请问这段代码是多线程执行的吗

遇到的现象和发生背景,请写出第一个错误信息

如果是的话 我发送请求时加入一个延时 为什么截面会卡住呢?

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
import json
import sys
import time
import requests
from PyQt5.Qt import *
from PyQt5 import uic


class Thread01(QThread):
    # 定义一个调子线程函数的信号
    thread01_signal = pyqtSignal(str)

    def __init__(self, signal):
        super(Thread01, self).__init__()
        # 信号绑定槽
        self.thread01_signal.connect(self.signal_do)
        # 拿到主线程定义的那个信号
        self.signal_rece = signal

    def signal_do(self, user_pwd_json):
        user_pwd_dict = json.loads(user_pwd_json)
        print(user_pwd_dict.get("username"))
        print(user_pwd_dict.get("password"))

        # 使用request模块 发送请求(post)
        r = requests.post(url="https://service-nmag56oc-1318270601.gz.apigw.tencentcs.com/release/qt_login_test",
                          json=user_pwd_dict)
        print("接收到腾讯服务器响应:", r.content.decode())
        ret = r.json()
        # 返回数据后发送信号 让主线程执行显示函数
        self.signal_rece.emit(json.dumps(ret))

    def run(self):
        # 让子线程不结束 等待任务 (信号)
        while True:
            print("子线程01正在执行..")
            time.sleep(1)


class MyWindow(QWidget):
    # 定义一个线程01返回过来结果之后 调用显示函数的信号
    signal_rece = pyqtSignal(str)

    def __init__(self):
        super(MyWindow, self).__init__()
        # 绑定这个信号
        self.signal_rece.connect(self.signal_rece_do)
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./FeiQQ.ui")
        # 获取控件对象
        self.username = self.ui.lineEdit
        self.password = self.ui.lineEdit_2
        self.btn_log = self.ui.pushButton
        self.btn_forget_pwd = self.ui.pushButton_2
        self.text_browser = self.ui.textBrowser

        # 绑定登录函数
        self.btn_log.clicked.connect(self.click_log)
        # 创建thread01对象 并把返回结果后调用显示函数的信号传过去 以便让子线程拿到返回结果后 触发信号
        self.thread01 = Thread01(self.signal_rece)
        # 执行这个线程
        self.thread01.start()

    def click_log(self):
        # 拿到账号和密码 发给子线程执行
        username = self.username.text()
        password = self.password.text()

        # 怎么发  那就是子线程创建一个信号 并且可以接受字符串 子线程收到信号 执行子线程中的函数
        # 要发这个信号 就要拿到thread01对象中的信号
        self.thread01.thread01_signal.emit(json.dumps({"username": username, "password": password}))

    def signal_rece_do(self, data):
        # 把json字符串变为字典
        data = json.loads(data)
        # 把返回过来的errmsg显示
        self.text_browser.setText(data["errmsg"])
        self.text_browser.repaint()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    app.exec()


运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”