Python 2.7 我如何安排我的桌面应用程序(PyQt)每隔一段时间发送电子邮件
因此,我构建了这个很好的应用程序(),但不知道如何在其上实现计划作业,该作业可以根据某些条件定期发送电子邮件。我正在尝试使用实现它,但不知道如何让我的应用程序自动调用它。 这是我的密码:Python 2.7 我如何安排我的桌面应用程序(PyQt)每隔一段时间发送电子邮件,python-2.7,pyqt4,schedule,Python 2.7,Pyqt4,Schedule,因此,我构建了这个很好的应用程序(),但不知道如何在其上实现计划作业,该作业可以根据某些条件定期发送电子邮件。我正在尝试使用实现它,但不知道如何让我的应用程序自动调用它。 这是我的密码: import time, schedule def job(): print "I'm working..." schedule.every(10).seconds.do(job) while True: schedule.run_pending() time.sleep(1)
import time, schedule
def job():
print "I'm working..."
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
当我启动我的应用程序时,什么都不起作用。我如何让我的应用程序知道这一点。
如果可能,我希望在不启动应用程序的情况下执行此计划作业。如果要计划将与用户交互的作业,必须使用Camelot操作,它有自己的方法来执行模型线程中的函数,将结果发布到GUI线程,然后返回 但你不需要这些,你只需要运行一些作业(函数),这些作业(函数)将访问数据库、创建电子邮件并发送它,而无需与用户交互。这可以通过一个完全独立的应用程序完成,而无需GUI。 为了避免创建两个应用程序,可以使用命令行参数更改行为。如果在没有任何参数的情况下启动应用程序,它将像往常一样打开GUI,但如果在
-background
下运行它,它将只启动调度循环。
然后,您可以在系统启动时挂接应用程序,并使用“-background”执行它,这样您就可以在不要求用户启动应用程序的情况下运行计划
如果用户稍后启动应用程序,那么您将有两个实例在运行,第一个运行调度循环,第二个运行GUI
main.py:
if __name__ == '__main__':
import sys
if "-background" in sys.argv:
import background
background.main()
else:
main() #camelot's main
background.py:
from camelot.core.orm import Session
import time, schedule
def job():
session = Session()
#Use session to access and manipulate model
print "I'm working..."
session.flush() #flush session to DB
def main():
from camelot.core.conf import settings
settings.setup_model()
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
您应该使用
python main.py-background
运行应用程序 您需要从这些作业访问模型数据(数据库)吗?你的应用程序有GUI界面吗?Camelot使用两个线程,一个用于GUI,一个用于数据访问。您的while
可能会阻止其中一个线程启动或继续执行。是。我想访问我的模型数据并根据数据库中数据的状态发送邮件,是的,它有GUI界面。此外,如果可能的话,我希望使用camelot batchjob运行此作业,以监视运行作业的状态。此作业不能按我希望的方式运行,因为应用程序用户发出命令会很尴尬。您可以在后台运行应用程序,在操作系统启动时使用“-background”启动它。然后,用户只要愿意,就可以打开普通的应用程序(使用GUI)。您说过“我希望此计划作业在不启动应用程序的情况下执行。”。您可以避免显示GUI,但是如果您不运行某个东西,您打算怎么做?您能在上面的第一句话中解释更多吗。我很困惑,我已经编辑了答案。您的应用程序运行在哪个操作系统上?非常感谢@smasho。窗户