Python等待长输出时抛出一些东西

时间:2015-08-07 05:52:19

标签: python python-2.7 time

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

我想知道如何每隔30秒打印一次“请稍候......”,收集完所有数据后就会停止。

有人可以帮我吗?

4 个答案:

答案 0 :(得分:0)

这可能是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!')

答案 1 :(得分:0)

您可以使用多线程执行此操作,在单独的线程中运行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 :(得分:0)

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

类collectdata(QDialog):     def init (自我,hbrk,* args,** kwargs):         超级(收集数据,自我)。初始化(* 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()

答案 3 :(得分:-2)

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