How to make Python apscheduler run in background

lqhcpsgbl picture lqhcpsgbl · Aug 16, 2015 · Viewed 9.9k times · Source

I want to make Python apscheduler run in background , here is my code:

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()])

when I run the command:

look:Python look$ python itger.py

I just got this:

INFO:apscheduler.scheduler:Scheduler started DEBUG:apscheduler.scheduler:Looking for jobs to run DEBUG:apscheduler.scheduler:No jobs; waiting until a job is added INFO:apscheduler.scheduler:Added job "simple_task" to job store "default"

And ps:

ps -e | grep python

I just got 54615 ttys000 0:00.00 grep python

My Problem is how to set the code run in background and I can see it's running or it's print log for every 5 secs so the code show?

Answer

Mikko Ohtamaa picture Mikko Ohtamaa · Aug 16, 2015

BackgroundScheduler runs in a background thread which in this case, I guess, doesn't prevent the application main threat to terminate.

Try add at the end of your application:

 import time

 print("Waiting to exit")
 while True:
    time.sleep(1)

... and then terminate your application with CTRL+C.