我如何安排我的桌面应用程序(PyQt)以一定的时间间隔发送电子邮件

How do I schedule my desktop application(PyQt) to send emails at some intervals

所以,我构建了这个不错的应用程序(using camelot) and do not know how to implement a scheduled job on it, that can send emails based on some conditions at regular intervals. I am trying to implement it using schedule 但不知道如何让我的应用程序自动调用它。 这是我的代码:

import time, schedule


def job():
    print "I'm working..."

schedule.every(10).seconds.do(job)


while True:
    schedule.run_pending()
    time.sleep(1)

当我启动我的应用程序时,没有任何效果。我如何让我的应用程序意识到这一点。 如果可能的话,我希望这个计划作业在不启动我的应用程序的情况下执行。

如果你想安排与用户交互的作业,你必须使用 Camelot Actions,它们有自己的方法在模型线程中执行函数,发布结果到 GUI 线程,然后返回...

但您不需要那个,您只需要 运行 作业(函数)即可访问数据库、创建电子邮件并发送,无需与用户交互。这可以通过完全独立的应用程序来完成,无需 GUI。 为了避免创建两个应用程序,您可以使用命令行参数更改行为。如果您在没有任何参数的情况下启动应用程序,它将像往常一样打开 GUI,但是如果您使用 运行 它和 -background,它只会启动计划循环。 然后,您可以在系统启动时挂接您的应用程序,使用“-background”执行它,您将拥有 运行ning 计划,而无需您的用户启动应用程序。

如果稍后用户启动应用程序,那么您将有两个实例 运行ning,第一个 运行ning 调度循环,第二个带有 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 的应用程序。