Haskell中的作业调度

时间:2014-06-03 20:07:45

标签: haskell job-scheduling

到目前为止,在Haskell中做了哪些工作来调度作业以本机方式执行?这是我正在思考的草图。

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

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

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

1 个答案:

答案 0 :(得分:6)

为什么不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`"