Как остановить / завершить выполнение скрипта python с помощью BackgroundScheduler() из APScheduler

#python #exit #execution #terminate #apscheduler

#python #выход #выполнение #завершить #apscheduler

Вопрос:

Я пытаюсь остановить выполнение цикла while изнутри функции foo(). Я безуспешно пробовал exit() / sys.exit . Как я могу полностью остановить выполнение программы изнутри функции?

 from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime, timedelta
import time
import sys

def foo(stop = False):
    print('Function foo executed')
    if stop: 
        sys.exit

scheduler = BackgroundScheduler() 
dd = datetime.now()   timedelta(seconds=10)
scheduler.add_job(foo, 'date', run_date=dd, args=[True])
scheduler.start()

while True:
    print('Inside the loop')
    time.sleep(2)
 

Ответ №1:

Используйте psutil

 import psutil

psutil.Process().terminate()
 

Из документа,
psutil.Process() если PID опущен, используется текущий PID процесса (os.getpid()).

Имейте в виду, что завершение завершится с кодом выхода 0. Если вам нужен другой код выхода, вы можете использовать send_signal() или даже kill()

Комментарии:

1. Это было так полезно. Я пробовал то, что делал OP, я пробовал прослушиватель, думая, что могу sys.exit() оттуда, но ничего из этого не сработало. Это psutil.Process().terminate() способ завершить работу независимо от того, в каком потоке вы находитесь.