【问题标题】:Python Priting Out Something While Waiting For Long OutputPython 在等待长输出时打印出一些东西
【发布时间】:2015-08-07 05:52:18
【问题描述】:

我创建了一个收集数据的 python 文件。收集完所有数据后,会打印出“Done.”。有时,收集所有数据可能需要至少 3 分钟。

我想知道如何每 30 秒打印一次“请稍候...”之类的内容,并在收集完所有数据后停止。

谁能帮帮我?

【问题讨论】:

  • 您可以使用线程。在一个线程中完成您的工作,并将计时器放在另一个线程中。我也会给你代码示例,但我在车上的红绿灯处使用手机。
  • 你可以使用线程。 have look at

标签: python python-2.7 time


【解决方案1】:

您可以使用多线程来做到这一点,在单独的线程中运行您的 collect_data 方法并在主线程中监视该线程。

下面是代码示例:

import time
from threading import Thread


def collect_data():
    pass

t = Thread(target=collect_data)
t.start()

timeout = 30.0

while t.isAlive():
    time.sleep(0.1)
    timeout -= 0.1
    if timeout == 0.0:
        print 'Please wait...'
        timeout = 30.0

【讨论】:

    【解决方案2】:

    这可能与another question 重复。看起来您可能有两个问题:有一个以可靠间隔触发的计时器(最好通过线程和time.sleep() 函数处理),以及在处理器繁忙时强制输出。

    对于后一个问题,最好的工具是sys.stdout.flush(),它将输出推送到当前输出设备(这可能是您的控制台,或 iPython 笔记本输出屏幕)。这也适用于打印已调用函数的输出 - 如果您的计算被包装在另一个函数中,这很有用。

    示例代码:

    import sys
    
    def print_this(mystr):
       print(mystr)
       sys.stdout.flush()    
    
    for i in range(1,100)
       print_this('hello world!')
    

    【讨论】:

      【解决方案3】:

      您可以简单地创建一个标签并将其隐藏,在收集数据期间您可以显示它。

      类收集数据(QDialog): def init(self, hbrk, *args, **kwargs): super(collectdata, self).init(*args, **kwargs)

          self.QBtn = QPushButton()            
          self.setFixedWidth(800)
          self.setFixedHeight(600)
          self.QBtn.clicked.connect(self.longprocess)
          layout = QFormLayout()
          layout.addRow(self.QBtn)
      
          self.lblwait = QLabel("Please Wait ...")
          layout.addRow(self.lblwait)
          self.lblwait.hide()
      
      def longprocess(self):
          self.lblwait.show()
          #.... collect your data
          self.lblwait.hide()
      

      【讨论】:

        【解决方案4】:

        如果程序知道它正在获取多少数据,您可以将其设置为像进度条一样运行..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-04
          相关资源
          最近更新 更多