我需要以下架构:
scheduling-thread(S):
- push scheduling event to "schedule" queue, with `data` and a `deadline`
scheduler-thread:
- forever loop
- process scheduling events from the "schedule" queue
- push event to a "deadlines-met" queue when deadline is met
customer-thread(S):
- listen to "deadlines-met" queue
也就是说,调度程序线程通过“调度”队列从调度线程接收数据,并在满足截止日期时将它们推送到“deadlines-met”队列。
监听“deadlines-met”队列的客户将在所需的时间收到事件。
我担心scheduler-thread
的实施可能很复杂,因为它需要做两件事:
两者都无法在同一时间完成:也就是说,如果我等待截止日期到期,我无法收听新的日程安排事件,如果我正在听,我不能等到截止日期到期
我怎样才能实现这个调度线程?简单的替代方法(sched模块)会在等待截止日期到期时阻塞我的线程,这样我就无法处理新的调度事件。
答案 0 :(得分:1)
另一种方法是使用优先级队列。
我在Python中没有这样做,但想法是将截止日期排序并等待最短时间。如果你使用condition object,你可以wait()
最短,但是当发布另一个事件时,notify()
将取消睡眠,并且线程将下一个事件放入已排序列表中再次等待最短的时间。
答案 1 :(得分:0)
在“主”程序中创建队列对象
从“main”程序
启动Threading.thread的两个线程检查每个线程的队列
您可以阻止从队列中读取,或者您可以睡眠并使用Queue.empty()检查每一秒