将事件添加到 运行 sched.scheduler
Adding an event to a running sched.scheduler
此代码应创建一个执行 sched.scheduler.run()
的线程,然后在未来 5 秒内安排一个事件。但是,在 macOS Catalina 的 Python 3.7.4 上,计划的事件回调不会 运行。
您是否可以在 运行 宁 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)
根据文档https://docs.python.org/3/library/sched.html
run
不会执行您期望的无限循环操作。它消耗队列并且没有进一步的事件然后它 returns。因此,如果 运行 在 'Ding' 排队之前执行,'Ding' 将排在队列中直到天
结束
此代码应创建一个执行 sched.scheduler.run()
的线程,然后在未来 5 秒内安排一个事件。但是,在 macOS Catalina 的 Python 3.7.4 上,计划的事件回调不会 运行。
您是否可以在 运行 宁 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)
根据文档https://docs.python.org/3/library/sched.html
run
不会执行您期望的无限循环操作。它消耗队列并且没有进一步的事件然后它 returns。因此,如果 运行 在 'Ding' 排队之前执行,'Ding' 将排在队列中直到天