Фоновое задание не запускается

#python #apscheduler

Вопрос:

Я запускаю три фоновых кода со следующим кодом, и я вижу, что все время выполняется только третья функция. Оставшиеся два никогда не вызываются.

Не могли бы вы дать некоторое представление, если я что-то здесь упускаю?

 from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler(job_defaults={'max_instances': 4})


def fun1():
    # I have some looping structure updating DB rows here


def fun2():
    # I have some looping structure updating DB rows here


def fun3():
    # I have some looping structure updating DB rows here


if __name__ == '__main__':
    scheduler.add_job(id='task1', func=fun1, trigger='interval', seconds=10)
    scheduler.add_job(id='task2', func=fun2, trigger='interval', seconds=10)
    scheduler.add_job(id='task3', func=fun3, trigger='interval', seconds=10)
 

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

1. Я хотел вызывать эти функции каждые 5-10 секунд. Поэтому я воспользовался этим пакетом.

2. Где вы запустили планировщик, проверьте это

3. импорт потоковой передачи и в опции потоковой передачи используйте длительность времени, а затем функцию, которую вы хотите вывести

Ответ №1:

Причина, по которой ничего не происходит, заключается в том, что вы не запустили планировщик. Кроме того, если вы используете BackgroundScheduler этот фрагмент, процесс немедленно завершится, потому что там нет ничего, что могло бы помешать завершению основного процесса. Чтобы предотвратить это, используйте BlockingScheduler вместо этого.

Ответ №2:

 import threading


def fun1():
    print("HELLO")  # I have some looping structure updating DB rows here
    threading.Timer(5.0, fun2).start()  # I gave 5.0 to get print on 5 second


def fun2():
    print("HELLO CODER")  # I have some looping structure updating DB rows here
    threading.Timer(2.0, fun3).start()  # I gave 2.0 to get print on 2 second


def fun3():
    print("HELLO CODER ON THE WAY")
    threading.Timer(10.0, fun1).start()  # I gave 10.0 to get print on 10 second
    # I have some looping structure updating DB rows here


fun1()
 

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

1. Спасибо @Ehsan Rahi за ваш ответ. вы вызываете только одну забаву1(), это нормально. Извините, что задаю этот вопрос, так как я новичок в этом потоковом и т. Д., И нужно ли применять это в классе?

2. вы можете вызвать функцию в соответствии со своим приоритетом, например, вы хотите перейти от функции 1 к функции 5, затем вы даете имя функции 5, а затем, если вы непосредственно перейдете от функции 5 к функции 11, вы сможете . это зависит от вашего выбора. вы можете реализовать больше, чтобы получить больше ясности. Спасибо @George