python的守护线程会让print语句只执行一部分吗?

import threading

import time
def funa():
    print('开始上课了')  # 1
    # time.sleep(2)    # 延迟2秒
    print('结束了')

def funb():
    print('我们今天学习线程')  # 2
    # time.sleep(2)  # 延迟2秒
    print('开始上课,认真听讲')

t1 = threading.Thread(target=funa)  # target函数后面接收的是函数名,没有括号!!!!
t2 = threading.Thread(target=funb)

    #  守护线程 
t1.setDaemon(True)
t2.setDaemon(True)

    #开启子线程
t1.start()
t2.start()

诚心请教各位,上面代码设置了守护线程,其中一次的执行结果如下图:

img

我有以下问题:
1.为什么打印出来的语句中,“开始上课了”和“我们今天学习线程”两句话中间没有换行?执行完也没有换行。正常来说,print语句打印完不是应该换行吗?
2.还是说,https://img-mid.csdnimg.cn/release/static/image/mid/ask/19248070924617.png "#left")
线程t1被线程t2抢占资源的时候,会在一条语句的执行到一半的时候被抢占?那会不会出现只打印了“开始”两个字之后,就被t2抢占了资源?
3.线程在执行的时候,最小单位是什么?(我就是想问,线程每次执行,至少执行完一个什么单位,才有可能发生被别的线程抢占资源的情况?)

上面的编辑有点问题,提问部分请看下面:

诚心请教各位,上面代码设置了守护线程,其中一次的执行结果如下图:

https://pan.baidu.com/s/1cilABOl6ESBpODsta2Behw?pwd=nvew

我有以下问题:
1.为什么打印出来的语句中,“开始上课了”和“我们今天学习线程”两句话中间没有换行?执行完也没有换行。正常来说,print语句打印完不是应该换行吗?
2.还是说,线程t1被线程t2抢占资源的时候,会在一条语句的执行到一半的时候被抢占?那会不会出现只打印了“开始”两个字之后,就被t2抢占了资源?
3.线程在执行的时候,最小单位是什么?(我就是想问,线程每次执行,至少执行完一个什么单位,才有可能发生被别的线程抢占资源的情况?)