我创建了一个收集数据的python文件。收集完所有数据后,它将打印出“完成”。有时,收集所有数据可能需要至少3分钟。
我想知道如何每隔30秒打印一次“请稍候......”,收集完所有数据后就会停止。
有人可以帮我吗?
答案 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)
如果程序知道它获得了多少数据,您可以将其设置为像进度条一样运行..