下午好。有一个用 python3 编写的程序,带有 PyQt5 图形界面。它有许多不同的模块和功能。到目前为止,一切都在一个线程中运行,即 没有子进程和多进程。该程序有一个启动器:
if __name__ == '__main__':
Base.start_base()
app = QApplication(sys.argv)
form = Ui_Form()
Ui_Form.user_pass(form)
form.show()
sys.exit(app.exec_())
然后,在程序本身中已经有(据我所知)一块 (module def retranslateUi(self, Form): ),其中程序旋转一圈并等待 GUI 中的按键:
self.Begin.clicked.connect(self.choice)
self.Clr_mes.clicked.connect(self.clear)
self.radio_print_user_base.clicked.connect(self.print_userbase)
self.Foto_Rate.clicked.connect(self.download_fotorating)
self.Fotorate_folder_btn.clicked.connect(self.fotorate_folder)
在我看来,她在这里旋转,她实际上是如何抓住这些压力的——我不知道。
实际上,问题是:如何向程序添加一个计时器来跟踪时间,比如说,每 10 分钟它将启动一个程序模块(模拟 GUI 中的击键以启动所需模块)?我会澄清:扣上钥匙,启动模块,模拟按下 - 我可以。我不明白如何启动计时器以及在何处输入计时器,这将与程序同时工作,无论它当前正在做什么以及在那里按下了什么。
PS 我试着玩了一下multiprocessing模块,把breakdown放到processes下if __name__ == '__main__':,但是simultaneity不行,processes还是轮流执行,其中一个挂了很久(比如画界面就挂了并且有一个白色的空窗口),等待它完成另一个工作。也许他只是做错了。
如果不需要进行复杂的计算工作,那么最简单的流程就足够了:
该流程很简单,将与应用程序一起完成其工作。如果你打算在里面“算很多”,那么裸 pythonic 流是不合适的,不会有任何收获。唯一值得注意的参数是
daemon. 默认情况下,应用程序在终止之前等待其所有子线程完成。如果线程已被声明为守护进程,则应用程序不会等待它完成。那些。如果没有这个参数,应用程序将永远等待关闭(如何向线程发送关闭信号是一个单独的主题)。守护进程很方便,因为您根本不必担心关闭它们 - 它们始终与应用程序一起工作。该函数可能也很有趣
sleep——它暂停了当前线程的工作(不是全部,不是主线程,而是只有当前线程),这将允许控制界面绘制的线程做它自己的事情而不是等谁。然而,还有另一种方法可以使用 Qt 本身来实现,而无需与线程共舞。在引擎盖下,您可以阅读有关信号和事件的信息,这里我将给出针对作者问题的特定解决方案的代码:
该代码将创建一个带有按钮和铭文的简单窗口。铭文通过按下按钮和计时器来改变。
这是一个例子:
您可以使用多处理,但首先它会给系统带来更多负载,其次它更难管理