Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Python ApsScheduler在后台运行_Python_Ps_Apscheduler - Fatal编程技术网

如何使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

我想让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 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),以确保即使在重新启动或崩溃后,程序仍能继续执行