提问者:小点点

Haskell中的作业调度


到目前为止,在Haskell中已经完成了哪些工作来安排以原生方式执行的作业?这是我的想法的草图。

假设我有一个函数work我想在Date执行,大概在未来(如果没有,我们可以安排它立即执行)。在这种情况下,让我们假设有某种作业monad让它发生。

type JobId = ..
schedule :: Date -> Job () -> Job JobId

然后,这被传递到(最好是持久的)调度机制,该机制将在适当的时间执行调度的作业,并且还提供某种类型的参考< code>JobId,以便可以检查或重新调度该作业。我在Ruby中使用过几个不同的作业调度库,比如Delayed Job和Sidekiq。Haskell社区中有类似的关于作业调度问题的工作吗?也许Haskell语言的本质产生了一种足够简单的模式,给定一些原始函数,库就不完全必要了?


共1个答案

匿名用户

为什么不forkIOthreadDelay

下面是您可以做的事情的草图:

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`"