admintest166 发表于 2022-8-2 10:29:38

多线程的问题

代码如下所示
import threading
import time

def sing():
    for i in range(3):
      print('唱歌.....')
      time.sleep(1)
def dance():
    for i in range(3):
      print('跳舞.....')
      time.sleep(1)
      

sing_thred=threading.Thread(target=sing)
dance_thred=threading.Thread(target=dance)

sing_thred.start()
dance_thred.start()




运行结果如下所示
唱歌.....
跳舞.....
跳舞.....唱歌.....

唱歌.....跳舞.....


想问下各位大佬 为什么第一次执行唱歌跳舞 分开的而第二次循环执行时 唱歌和跳舞却同时打印出来了   

如果说两个URL 一个www.baidu.com 一个www.taobao.com是不是也会变成 www.baidu.comwww.taobao.com 请问是什么原因呢 有什么方法可以解决吗

qq1151985918 发表于 2022-8-2 10:42:05

https://blog.csdn.net/LIva_/article/details/122382327

kogawananari 发表于 2022-8-2 11:33:34

用logger模块代替print输出即可

hrpzcf 发表于 2022-8-2 13:27:16

print不是线程安全的,给print语句加锁即可(我用Python 3.10.5 没有出现你的问题,但是我以前确实遇到过和你一样的问题,不知道是不是改过了)

import threading
import time

locker = threading.Lock()


def sing():
    for i in range(3):
      locker.acquire()
      print("唱歌.....")
      locker.release()
      time.sleep(1)


def dance():
    for i in range(3):
      locker.acquire()
      print("跳舞.....")
      locker.release()
      time.sleep(1)


sing_thred = threading.Thread(target=sing)
dance_thred = threading.Thread(target=dance)

sing_thred.start()
dance_thred.start()
页: [1]
查看完整版本: 多线程的问题