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

时间:2015-10-21 07:06:57

标签: python multithreading pyqt

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

  1. 启动一个新线程,并在其中运行PyQt QApplication。
  2. 工作N秒,并向运行PyQt的线程发送进度。
  3. 现在,在我启动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.
    

    任何建议?

    提前致谢。

1 个答案:

答案 0 :(得分:2)

很可能Qt的内容是使用信号(包括可能alarm())。根据{{​​1}} doco:

  

暂停执行当前线程达到给定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。 实际暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获程序后终止sleep()。 此外,暂停时间可能更长由于系统中其他活动的安排,所以要求任意金额。

您可能最好重新设计应用程序,以便可以使用QTimer