关于mainloop方法阻塞线程的解决方案

我最近在了解python线程这方面,最近我发现mainloop()方法似乎会阻塞掉其他线程,导致其他线程无法使用,只要关闭掉Gui界面之后其他线程就能正常运行了,也就是让mainloop()方法执行完毕后才能运行其他线程,请问这个问题该如何解决呢?这个问题困扰我很久了,希望大家可以帮帮我,求求了ಥ_ಥ

下方为源码:
import threading
import time
from tkinter import *

def xc_1():
ct=Tk()
ct.title("Demo")
pmk=ct.winfo_screenwidth()
pmg=ct.winfo_screenheight()
ctk=400
ctg=400
ctx=(pmk-ctk)//2
cty=(pmg-ctg)//2
ct.geometry("%ax%a+%a+%a"%(ctk,ctg,ctx,cty))
ct.resizable(0,0)
ct.mainloop()

def run():
time.sleep(1)
print('2s')
time.sleep(1)
print('1s')
time.sleep(1)
print('0s')
time.sleep(1)

t1 = threading.Thread(target=run)
t2 = threading.Thread(target=xc_1())
t1.start()
t2.start()

我的思路是这么处理 , 把要执行的工作线程, 放到 主线程里去。
供参考。

import threading
import time
from tkinter import *

def run(thread_title):
    time.sleep(1)
    print(thread_title, '2s')
    time.sleep(1)
    print(thread_title, '1s')
    time.sleep(1)
    print(thread_title, '0s')
    time.sleep(1)
    print(thread_title, '完成')

def xc_1():
    ct=Tk()
    ct.title("Demo")
    pmk=ct.winfo_screenwidth()
    pmg=ct.winfo_screenheight()
    ctk=400
    ctg=400
    ctx=(pmk-ctk)//2
    cty=(pmg-ctg)//2
    ct.geometry("%ax%a+%a+%a"%(ctk,ctg,ctx,cty))
    ct.resizable(0,0)

    t1 = threading.Thread(target=run,args=['work1'])
    t1.start()
    t2 = threading.Thread(target=run, args=['work2'])
    t2.start()
    ct.mainloop()

另外, 对于工作线程和界面的通信, 可以考虑用 pubsub