From 6296b8284ef7baa544d7b7c9c99749a1a2b40565 Mon Sep 17 00:00:00 2001 From: Nicolas Pouillard <nicolas.pouillard@gmail.com> Date: Wed, 4 Jul 2018 17:30:44 +0200 Subject: [PATCH] mapConcurrentlyChunked --- bin/gargantext-cli/Main.hs | 21 ++++++++++++++------- package.yaml | 1 + 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/bin/gargantext-cli/Main.hs b/bin/gargantext-cli/Main.hs index 892f9621..0652102c 100644 --- a/bin/gargantext-cli/Main.hs +++ b/bin/gargantext-cli/Main.hs @@ -32,10 +32,13 @@ import qualified Data.IntMap as DM import Data.Map (Map) import Data.Text (Text) -import Data.List (cycle) +import Data.List (cycle, concat) +import Data.List.Split (chunksOf) import System.IO (hPutStr, hFlush, stderr) import System.Environment import Control.Concurrent.Async as CCA (mapConcurrently) +import Control.Concurrent (getNumCapabilities) +import Prelude ((>>)) import Gargantext.Prelude import Gargantext.Core @@ -58,18 +61,22 @@ mapMP f xs = do liftIO $ hFlush stderr f x - - +mapConcurrentlyChunked :: (a -> IO b) -> [a] -> IO [b] +mapConcurrentlyChunked f ts = do + n <- getNumCapabilities + concat <$> mapConcurrently (mapM f) (chunksOf n ts) filterTermsAndCooc :: TermType Lang -> (Int, [Text]) -> IO (Map (Terms, Terms) Coocs) filterTermsAndCooc patterns (year, ts) = do - putStrLn $ "start filterTermsAndCooc " <> show year - r <- coocOn identity <$> mapM (terms patterns) ts - putStrLn $ "stop filterTermsAndCooc " <> show year + log "start" + r <- coocOn identity <$> mapM (\x -> {-log "work" >>-} terms patterns x) ts + log "stop" pure r + where + log m = putStrLn $ "filterTermsAndCooc: " <> m <> " " <> show year --main :: IO [()] main = do @@ -92,6 +99,6 @@ main = do let corpus' = DMaybe.catMaybes $ map (\k -> DM.lookup k corpus) years - r <- mapConcurrently (filterTermsAndCooc patterns) (zip years corpus') + r <- mapConcurrentlyChunked (filterTermsAndCooc patterns) (zip years corpus') putStrLn $ show r --writeFile outputFile cooc diff --git a/package.yaml b/package.yaml index 7d2e39f2..60809a27 100644 --- a/package.yaml +++ b/package.yaml @@ -168,6 +168,7 @@ executables: - cassava - ini - optparse-generic + - split - unordered-containers - full-text-search -- 2.21.0