Это раздел кода, который я пытаюсь запустить, все работает, пока я не нажму пункт меню «Пуск». Затем программа зависает. Если я удалю часть планировщика, он не зависнет. Может ли кто-нибудь помочь мне, что я делаю неправильно здесь. Впервые я использую Tkinter для создания графического интерфейса.

def scan():
    alerts.delete(1.0, END)
    alerts.insert(END, "Bot has started with these coins:\n{}".format(symbols))
    sched = BlockingScheduler({"apscheduler.timezone": "UTC",
                               "apscheduler.job_defaults.max_instances": "10"})

    @sched.scheduled_job("cron", minute="*/15", second="1")
    def run_each_15m(interval=Client.KLINE_INTERVAL_15MINUTE):
        # Code to execute

btn = Button(window, text="Clear alerts", command=clear)

btn.grid(column=0, row=1)

# Menu 
menu = Menu(window)

new_item = Menu(menu)

new_item.add_command(label='Start', command=scan)
0
Cryptologicx 2 Апр 2020 в 12:51
По какой-то причине переход с BlockingScheduler на BackgroundScheduler имел огромное значение. По крайней мере, пока работает, я вернусь к этой теме, если возникнет другая проблема.
 – 
Cryptologicx
2 Апр 2020 в 22:21
Надеюсь, вы хотя бы прочитали документацию о том, почему BlockingScheduler назван именно так. Его метод start() не возвращается, и поэтому ваш цикл событий tkinter не будет запущен.
 – 
Alex Grönholm
3 Апр 2020 в 13:18
Да. Я знал, что это связано с планировщиком. Так что я посмотрел на это. Первая страница объяснила это. BlockingScheduler: используйте, когда в вашем процессе работает только планировщик. BackgroundScheduler: используйте, когда вы не используете ни одну из перечисленных ниже платформ и хотите, чтобы планировщик работал в фоновом режиме внутри вашего приложения.
 – 
Cryptologicx
3 Апр 2020 в 14:09

1 ответ

И проблема решена, переход на BackgroundScheduler сделал свое дело.

from apscheduler.schedulers.background import BackgroundScheduler
sched = BackgroundScheduler({"apscheduler.timezone": "UTC"})
0
Cryptologicx 2 Апр 2020 в 22:39