鱼C论坛

 找回密码
 立即注册
查看: 2703|回复: 7

PYTHON 多线程问题

[复制链接]
发表于 2022-11-27 20:45:29 | 显示全部楼层 |阅读模式

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

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

x
请教大佬,这段代码打印时间部分执行到PLAYMP3部分就不继续执行了,我在PLAYMP3方法里面已经加了线程了啊
```
import time
import playsound
import _thread
import asyncio
import multiprocessing

class Clock(object):
    ti = time.localtime() # 获得本机时间

    """数字时钟"""
    def __init__(self):
        """初始化方法   
        :param hour: 时
        :param minute: 分
        :param second: 秒
        """        
        self._hour = Clock.ti.tm_hour # 当前小时
        self._minute = Clock.ti.tm_min # 当前分钟
        self._second = Clock.ti.tm_sec # 当前秒

    def run(self):
        """走字"""
        self._second += 1
        if self._second == 60:
            self._second = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    def show(self):
        """显示时间"""
        return '%02d:%02d:%02d' %(self._hour, self._minute, self._second)
        

    # play mp3
    def playMP3(self,playlen=30):
        mp3 = 'F:\mp3\yesterday once more.mp3'
        p = multiprocessing.Process(target=playsound.playsound, args=(mp3,))
        # 开始播放
        p.start()
        stopTime= playlen  # 播放音乐时间长度/秒
        #  开始计时
        while stopTime:
            time.sleep(1)
            stopTime -= 1
        # 时间到就停止
        p.terminate()
            
    def monitorTime(self, h, m, playlen=30):
        self.setClockHour = h
        self.setClockMin = m
        self.setClocksecond = 0
        mp3 = 'F:\mp3\yesterday once more.mp3'
        if self._hour == self.setClockHour and self._minute == self.setClockMin:
            self.playMP3()

def main():   
    clock = Clock() # 实例化 Clock 类
    while True:
        print(clock.show())
        time.sleep(1)
        clock.monitorTime(20,26)
        clock.run()

if __name__ == '__main__':
    # asyncio.run(main())
    main()
```
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-27 21:48:13 | 显示全部楼层
self._hour,_minute,second有刷新机制吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-27 23:22:10 From FishC Mobile | 显示全部楼层
playmp3里面一个while循环不就卡住出不来了吗?简单的办法就是新建一个线程计时,再新建一个线程播放。还有,这操作用多线程就可以了,不需要多进程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-28 18:03:07 | 显示全部楼层
suchocolate 发表于 2022-11-27 21:48
self._hour,_minute,second有刷新机制吗?

上面的没有刷新,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-28 18:06:50 | 显示全部楼层
hrpzcf 发表于 2022-11-27 23:22
playmp3里面一个while循环不就卡住出不来了吗?简单的办法就是新建一个线程计时,再新建一个线程播放。还有 ...

线程计时,线程播放,
这个线程播放的用时间来判断,如何捕获线程里面的时间?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-28 18:21:11 From FishC Mobile | 显示全部楼层
sssschenyi 发表于 2022-11-28 18:06
线程计时,线程播放,
这个线程播放的用时间来判断,如何捕获线程里面的时间?

不是呀,你不是要计时停止播放吗,先开始播放线程,把线程实例赋值为你那个类的一个属性,然后开始计时线程,计时线程里判断到时间了就访问刚才赋值的那个属性获取播放线程实例,结束播放线程就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-28 18:34:21 | 显示全部楼层
hrpzcf 发表于 2022-11-28 18:21
不是呀,你不是要计时停止播放吗,先开始播放线程,把线程实例赋值为你那个类的一个属性,然后开始计时线 ...

不是计时停止播放,而是播放的时候继续打印输出时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-28 19:16:24 | 显示全部楼层
sssschenyi 发表于 2022-11-28 18:34
不是计时停止播放,而是播放的时候继续打印输出时间

那我看花眼了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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