鱼C论坛

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

多线程的问题

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

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

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

x
代码如下所示
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 请问是什么原因呢 有什么方法可以解决吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 10:42:05 From FishC Mobile | 显示全部楼层
https://blog.csdn.net/LIva_/article/details/122382327
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-2 11:33:34 | 显示全部楼层
用logger模块代替print输出即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 10:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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