sssschenyi 发表于 2022-11-27 20:45:29

PYTHON 多线程问题

请教大佬,这段代码打印时间部分执行到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()
```

suchocolate 发表于 2022-11-27 21:48:13

self._hour,_minute,second有刷新机制吗?

hrpzcf 发表于 2022-11-27 23:22:10

playmp3里面一个while循环不就卡住出不来了吗?简单的办法就是新建一个线程计时,再新建一个线程播放。还有,这操作用多线程就可以了,不需要多进程

sssschenyi 发表于 2022-11-28 18:03:07

suchocolate 发表于 2022-11-27 21:48
self._hour,_minute,second有刷新机制吗?

上面的没有刷新,

sssschenyi 发表于 2022-11-28 18:06:50

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

线程计时,线程播放,
这个线程播放的用时间来判断,如何捕获线程里面的时间?

hrpzcf 发表于 2022-11-28 18:21:11

sssschenyi 发表于 2022-11-28 18:06
线程计时,线程播放,
这个线程播放的用时间来判断,如何捕获线程里面的时间?

不是呀,你不是要计时停止播放吗,先开始播放线程,把线程实例赋值为你那个类的一个属性,然后开始计时线程,计时线程里判断到时间了就访问刚才赋值的那个属性获取播放线程实例,结束播放线程就行了。

sssschenyi 发表于 2022-11-28 18:34:21

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

不是计时停止播放,而是播放的时候继续打印输出时间

hrpzcf 发表于 2022-11-28 19:16:24

sssschenyi 发表于 2022-11-28 18:34
不是计时停止播放,而是播放的时候继续打印输出时间

那我看花眼了{:10_247:}
页: [1]
查看完整版本: PYTHON 多线程问题