在Yesod处理程序中创建新线程

时间:2013-10-01 00:24:30

标签: multithreading web-services haskell functional-programming yesod

我想知道,有人可以举例说明如何从Yesod处理程序中启动线程吗?

我想要这样的事情:

  1. 用户访问mypage.com/create,这是Yesod路线CreateR

  2. 按下页面上的按钮

  3. CreateR的POST处理程序分叉一个新线程,然后将用户重定向到某个“成功”页面。

  4. 线程继续在后台运行,改变其他处理程序将访问的STM变量。

  5. 我正在使用liftIO,但它崩溃了以下错误:

    Exit code: ExitFailure 139
    

    文档说明了有关resourceForkIO的内容,但我无法使这些类型起作用,因为我不知道在哪里/如何使用该函数。

1 个答案:

答案 0 :(得分:2)

我一直这样做,特别是对于长时间运行的任务:

liftIO $ forkIO $ customizerJob cnStr env

我不使用ResourceT或任何TVars来交换信息和进度。而是我在db中使用表。非常简单,不需要对haskell monad变换器和STM的神秘知识:)