Home > Software design >  How to get VSCode to run an apscheduler without terminating?
How to get VSCode to run an apscheduler without terminating?

Time:08-16

When I click the arrow to run the python code, it simply executes. However, if I select the option to run the code line-by-line, then the scheduled tasks will continually run as desired.

import datetime
from datetime import datetime, timedelta
import time

from apscheduler.schedulers.background import BackgroundScheduler

sched = BackgroundScheduler(daemon=True)

frequency = 10/60

def main_func(frequency):
    start_time = datetime.now()
    end_time = start_time   timedelta(minutes=frequency)
    
    print("Start Time: ", start_time)
    print("End Time: ", end_time)

if __name__ == "__main__":
    sched.add_job(main_func, 'interval', [frequency], minutes=frequency)
    sched.start()

(Undesired): Pressing Button in VSCode:

Pressing Run Button in VSCode

(Desired): Selecting All Code in script within VSCode, Right Clicking and Run Line-by-Line

enter image description here

Questions:

How can I run the python file so it behaves like I ran it line-by-line and doesn't immediately terminate?

Also, will that method work if I ran the python script from a task scheduler?

CodePudding user response:

The answer to this question is is literally the first entry in the APScheduler FAQ.

The essence is that you're starting a background service and then letting the script run to the end which then exits the process. Use cases like these are what BlockingScheduler is for:

from datetime import datetime, timedelta
import time

from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

frequency = 10/60

def main_func(frequency):
    start_time = datetime.now()
    end_time = start_time   timedelta(minutes=frequency)
    
    print("Start Time: ", start_time)
    print("End Time: ", end_time)

if __name__ == "__main__":
    sched.add_job(main_func, 'interval', [frequency], minutes=frequency)
    sched.start()
  • Related