鱼C论坛

 找回密码
 立即注册
查看: 2578|回复: 3

多线程的问题

[复制链接]
发表于 2022-8-2 10:29:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下所示
  1. import threading
  2. import time

  3. def sing():
  4.     for i in range(3):
  5.         print('唱歌.....')
  6.         time.sleep(1)
  7. def dance():
  8.     for i in range(3):
  9.         print('跳舞.....')
  10.         time.sleep(1)
  11.         

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

  14. sing_thred.start()
  15. dance_thred.start()

复制代码



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

  4. 唱歌.....跳舞.....
复制代码


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

如果说两个URL 一个www.baidu.com 一个www.taobao.com  是不是也会变成 www.baidu.comwww.taobao.com 请问是什么原因呢 有什么方法可以解决吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 10:42:05 From FishC Mobile | 显示全部楼层
https://blog.csdn.net/LIva_/article/details/122382327
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-2 11:33:34 | 显示全部楼层
用logger模块代替print输出即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-2 13:27:16 | 显示全部楼层
print不是线程安全的,给print语句加锁即可(我用Python 3.10.5 没有出现你的问题,但是我以前确实遇到过和你一样的问题,不知道是不是改过了)

  1. import threading
  2. import time

  3. locker = threading.Lock()


  4. def sing():
  5.     for i in range(3):
  6.         locker.acquire()
  7.         print("唱歌.....")
  8.         locker.release()
  9.         time.sleep(1)


  10. def dance():
  11.     for i in range(3):
  12.         locker.acquire()
  13.         print("跳舞.....")
  14.         locker.release()
  15.         time.sleep(1)


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

  18. sing_thred.start()
  19. dance_thred.start()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 15:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表