如何使Python ApsScheduler在后台运行
我想让Python ApsScheduler在后台运行,下面是我的代码:如何使Python ApsScheduler在后台运行,python,ps,apscheduler,Python,Ps,Apscheduler,我想让Python ApsScheduler在后台运行,下面是我的代码: from apscheduler.schedulers.background import BackgroundScheduler, BlockingScheduler from datetime import datetime import logging import sys logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) def
from apscheduler.schedulers.background import BackgroundScheduler, BlockingScheduler
from datetime import datetime
import logging
import sys
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
def singleton(cls, *args, **kw):
instances = {}
def _singleton(*args, **kw):
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return _singleton
@singleton
class MyScheduler(BackgroundScheduler):
pass
def simple_task(timestamp):
logging.info("RUNNING simple_task: %s" % timestamp)
scheduler = MyScheduler()
scheduler.start()
scheduler.add_job(simple_task, 'interval', seconds=5, args=[datetime.utcnow()])
当我运行命令时:
look:Python look$ python itger.py
我刚得到这个:
信息:apscheduler。计划程序:计划程序已启动
调试:apscheduler。计划程序:正在查找要运行的作业
调试:apscheduler。计划程序:无作业;等待添加作业
信息:apscheduler.scheduler:已将作业“简单任务”添加到作业存储“默认”中
和ps:
ps -e | grep python
我刚刚得到了54615 ttys000 0:00.00 grep python
我的问题是如何设置在后台运行的代码,我可以看到它正在运行或每隔5秒显示一次打印日志,因此代码显示?
BackgroundScheduler
在后台线程中运行,我想在这种情况下,不会阻止应用程序主威胁终止
尝试在应用程序末尾添加:
import time
print("Waiting to exit")
while True:
time.sleep(1)
。。。然后用CTRL+C终止应用程序。线程并不是让代码由操作系统运行和管理的神奇方式。它们只在您的进程中是本地的,因此,如果该进程意外终止或消亡,那么您的线程也会意外终止或消亡 因此,您的问题的答案是:不要使用线程,以正常方式编写程序,以便可以在命令行上调用它,然后使用基于操作系统的调度器(如CRON)来调度它 或者,如果您的程序需要连续运行,因为它会建立缓存,每5分钟重新计算一次的代价很高,请使用过程观察程序(如supervisord),以确保即使在重新启动或崩溃后,程序仍能继续执行