3

我在 django 中运行了 apscheduler,它似乎可以工作......好吧。在我的项目init .py 中,我初始化了调度程序:

scheduler = Scheduler(daemon=True)

print("\n\n\n\n\n\n\n\nstarting scheduler")

scheduler.configure({'apscheduler.jobstores.file.class': settings.APSCHEDULER['jobstores.file.class']})
scheduler.start()

atexit.register(lambda: scheduler.shutdown(wait=False))

第一个问题是打印显示此代码执行了两次。其次,在其他应用程序中,我想引用调度程序,但不知道如何做到这一点。如果我得到另一个调度程序实例,我相信它是一个单独的线程池,而不是在这里创建的。

  1. 如何让一个且只有一个 apscheduler 实例运行?
  2. 如何在其他应用程序中引用该实例?
4

1 回答 1

3
  1. 这取决于您最初是如何获得两个调度程序实例的。您是否在工作线程/进程中启动 apscheduler?如果您有多个这样的工作人员,您将获得调度程序的多个实例。因此,您必须找到一种方法来防止调度程序被多次启动,方法是尽可能在不同的进程中运行它,或者为调度程序启动添加一些条件。

  2. 你没有。变量是每个进程的本地变量。您能做的最好的事情是构建某种远程执行系统,或者使用某种 ReST 服务或某种远程控制系统,如 execnet 或 rpyc。

于 2014-05-07T10:45:23.290 回答