Python的time.sleep(1)立即完成

问题描述 投票:1回答:1

我有一个执行以下操作的python函数:

  1. 启动新线程,并在其中运行PyQt QApplication。
  2. 工作N秒钟,并将进度发送到运行PyQt的线程。

现在,在我启动PyQt QApplication之前,主线程中的time.sleep()可以正常工作,但是在我启动它之后,time.sleep(1)立即返回。

这里是一个例子:

 def run_gui_thread(self):
    app = QApplication([])
    self.prompt = QDialog()
    self.ready = True
    app.exec_()

和:

def do_work(self):
    print "Now is %s." % time.strftime("%H:%M:%S")
    time.sleep(1)        
    print "Now is %s." % time.strftime("%H:%M:%S")
    time.sleep(1)        
    print "Now is %s." % time.strftime("%H:%M:%S")
    time.sleep(1)
    print "Now is %s." % time.strftime("%H:%M:%S")

    self.thread = threading.Thread(target = self.run_gui_thread)
    self.thread.start()

    time.sleep(1)
    print "Now is %s." % time.strftime("%H:%M:%S")        
    time.sleep(1)
    print "Now is %s." % time.strftime("%H:%M:%S")
    time.sleep(1)
    print "Now is %s." % time.strftime("%H:%M:%S")
    time.sleep(1)
    print "Now is %s." % time.strftime("%H:%M:%S")

输出:

Now is 10:00:56.
Now is 10:00:57.
Now is 10:00:58.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.

任何建议?

提前感谢。

python multithreading pyqt
1个回答
3
投票

最有可能Qt的东西在幕后使用信号(可能包括alarm())。按照time.sleep() doco:

在给定的秒数内暂停当前线程的执行。该参数可以是浮点数,以指示更精确的睡眠时间。 实际的暂停时间可能小于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止sleep()。]而且,暂停时间可能比请求的时间长任意量由于系统中其他活动的安排。

您最好重新架构应用程序,以便可以改用QTimer


0
投票

QTimer的替代值为time.sleep()

© www.soinside.com 2019 - 2024. All rights reserved.