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。窗户