网站地图 联系我们

学习python首选-实战python学习班,专注于python高级工程师培养,python课程:包括Python核心编程技术、全栈开发、网络爬虫、人工智能等。python全栈工程师+提高工作经验,获取免费试听课程!
当前位置: python培训 > python学习 > 常见问题 > 正文

求Pyqt 函数threading.Thread,print()阻塞解决方法

来源:肚皮舞 浏览量: 发布日期:20-08-27 11:15:49 调整字体大小【 【所属栏目:常见问题】

  我现在使用Pyqt中Phonon写一个简单的音乐播放程。 我想在播放的同时打印音乐当前的时间。

  def check_if_delay(self):

  while True:

  print(self.m_media.currentTime(),end=' ')

  time.sleep(2)

  def play(self, index):

  self.delayedInit()

  self.m_media.setCurrentSource(Phonon.MediaSource(index))

  self.check_thread = threading.Thread(target=self.check_if_delay)

  self.check_thread.setDaemon(True)

  self.check_thread.start()

  self.m_media.play()

  当我player.play(index)时,音乐能播放,但是却没有打印。 当我强制中断音乐播放时,需要打印的时间却有都出来了。 请问各位改怎么实现边播放边打印时间。

  你有两个方案,第一,不用多线程,因为显示线程一定在主线程里,子线程获取数据了也没办法直接往显示线程里写,你可以设置一个1s的timer,在timeout的槽里做显示 第二,如果你使用多线程的话,请用信号和槽来进行数据同步,将子线程里的数值发个信号出来传递到主线程的槽里完成更新

  这并不是block的问题,而是你需要flush stdout。 修改方法是在你的代码的check_if_play中,print语句之后,time.sleep语句之前,加入一句

  sys.stdout.flush()

  即可。

标签:
肚皮舞新闻动态News Center

肚皮舞视频

肚皮舞培训课程

联系卡伊丝contact us
联系我们
python培训「零基础入门到精通」python人工智能编程培训班-0798wz.com

咨询热线:18301225663