到目前为止,在Haskell中做了哪些工作来调度作业以本机方式执行?这是我正在思考的草图。
假设我有一个函数work
我希望在Date
执行,大概是将来执行(如果没有,我们可以安排它立即执行)。在这种情况下,让我们假装有某种Job
monad来发生这种情况。
type JobId = ..
schedule :: Date -> Job () -> Job JobId
然后将其传递到(最好是持久的)调度机制,该机制将在适当的时间执行调度的作业,并提供某种引用JobId
,以便可以检查或重新安排作业。我在Ruby中使用了几个不同的作业调度库,例如Delayed Job和Sidekiq。在Haskell社区中有关于作业调度问题的类似工作吗?也许在Haskell中,语言的本质使得模式足够简单,给定一些原始函数,库不是完全必要的吗?
答案 0 :(得分:6)
为什么不forkIO
和threadDelay
?
以下是您可以做的草图:
type JobId = ThreadId
type Job = IO
schedule :: Date -> Job () -> Job JobId
schedule date job =
forkIO $ do
time <- getCurrentTime
threadDelay (delay time)
job
where
delay time = error "TODO: compute the delay from `time` and `date`"