Python';时间到了。睡眠(1)立即结束

Python';时间到了。睡眠(1)立即结束,python,multithreading,pyqt,Python,Multithreading,Pyqt,我有一个python函数,它执行以下操作: 启动一个新线程,并在其中运行PyQt QApplication 工作N秒,并向运行PyQt的线程发送进度 现在,在我启动PyQt QApplication之前,主线程中的time.sleep()按预期工作,但在我启动它之后,time.sleep(1)立即返回 以下是一个例子: def run\u gui\u线程(self): app=QApplication([]) self.prompt=QDialog() self.ready=True app.e

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

  • 启动一个新线程,并在其中运行PyQt QApplication
  • 工作N秒,并向运行PyQt的线程发送进度
  • 现在,在我启动PyQt QApplication之前,主线程中的time.sleep()按预期工作,但在我启动它之后,time.sleep(1)立即返回

    以下是一个例子:

    def run\u gui\u线程(self):
    app=QApplication([])
    self.prompt=QDialog()
    self.ready=True
    app.exec()
    
    以及:

    def do_work(自我):
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    时间。睡眠(1)
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    时间。睡眠(1)
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    时间。睡眠(1)
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    self.thread=threading.thread(target=self.run\u gui\u thread)
    self.thread.start()
    时间。睡眠(1)
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    时间。睡眠(1)
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    时间。睡眠(1)
    打印“现在是%s.%time.strftime(“%H:%M:%s”)
    时间。睡眠(1)
    打印“现在是%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.
    
    有什么建议吗


    提前感谢。

    最有可能的是Qt人员在封面下使用了信号(可能包括
    报警()
    )。根据
    time.sleep()
    doco:

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


    您最好重新设计应用程序的体系结构,以便可以改用。

    作为一种快速黑客,您可以尝试
    import-select;选择。选择([]、[]、[]、1)
    并查看它是否能更好地经受住信号。感谢您的帮助!