Добавление события в работающий sched.scheduler - PullRequest
0 голосов
/ 19 января 2020

Этот код должен создать поток, который выполняет sched.scheduler.run(), а затем запланировать событие на 5 секунд в будущем. Однако на Python 3.7.4 в macOS Catalina обратный вызов запланированного события не выполняется.

Ожидается ли, что вы можете запланировать события на работающем sched.scheduler? Я бы предположил, что вы можете, поскольку вам разрешено отменять события в очереди, и исключение не выдается.

import datetime
import sched
import threading
import time


class Schedule:
    def __init__(self):
        self.scheduler = sched.scheduler(time.time, time.sleep)
        self.thread = threading.Thread(target=self.scheduler.run)
        self.thread.start()

    def at(self, when, callback, *args, **kwargs):
        e = self.scheduler.enterabs(when.timestamp(), 0, callback, args, kwargs)
        return e


target = (datetime.datetime.now() + datetime.timedelta(seconds=5))

s = Schedule()
s.at(target, print, 'Ding!')

while True:
    print(time.time() - target.timestamp(), s.scheduler.queue)
    time.sleep(1)

1 Ответ

1 голос
/ 19 января 2020

Согласно документации https://docs.python.org/3/library/sched.html

run не делает то, что вы ожидаете, бесконечно. Он потребляет очередь и без дальнейших событий возвращается. Er go, если run выполняется до того, как 'Ding' будет поставлен в очередь, 'Ding' будет находиться в очереди до конца дней

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...