我有一個小程序需要每5分鐘執行一次。如何僅使用Haskell無休止地運行Haskell程序?
現在,我有執行該任務的shell腳本,但我希望爲用戶提供運行它的能力,無需通過CLI中的鍵添加其他腳本。
達到此目的的最佳方法是什麼?
我有一個小程序需要每5分鐘執行一次。如何僅使用Haskell無休止地運行Haskell程序?
現在,我有執行該任務的shell腳本,但我希望爲用戶提供運行它的能力,無需通過CLI中的鍵添加其他腳本。
達到此目的的最佳方法是什麼?
我想你會想這樣的事情(或多或少僞代碼):
import Control.Concurrent (forkIO, threadDelay)
import Data.IORef
import Control.Monad (forever)
main = do
var <- newIORef 5000
forkIO (forever $ process var)
forever $ readInput var
process var = do
doActualProcessing
interval <- readIORef var
_ <- threadDelay interval
readInput var = do
newInterval <- readLn
writeIORef var newInterval
如果您需要從輸入線傳遞一些更復雜的數據處理線程,MVar
S或TVar
小號可能是比IORef
更好的選擇。
謝謝!這就是我一直在尋找的東西,我不知道'永遠' –
@FilipvanHoft永遠的實現非常直接,但只是調用例如'process'結尾的'process var'會使它無限遞歸(因此循環)。 –
選擇「TVAR」而不是「IORef」的原因是什麼?上面的代碼中是否有一些原子性問題? – chi
CRON,nohup或將其設置爲可啓動的服務。 – mikeb
CLI *中的* via key是什麼意思? –
@mikeb我想要它在純粹的Haskell中,用戶可能會改變時間,如3分鐘,10分鐘,所以我在CLI中有鍵來做到這一點,但不知道如何正確運行它。在C中,你可以'while'(1)...' –