diff --git a/FastCCD.py b/FastCCD.py
index 6d4b2a1bde2552ecb3509e026c004415074ac197..1f4124c5081a6f57cd077dbdbbfebb19da6a1e50 100644
--- a/FastCCD.py
+++ b/FastCCD.py
@@ -1,4 +1,4 @@
-import multiprocessing
+from joblib import Parallel, delayed, parallel_backend
 from time import strftime
 import tempfile
 import shutil
@@ -321,8 +321,10 @@ class FastCCD:
         timestamp = strftime('%X')
         print(f'start time: {timestamp}')
                                       
-        with multiprocessing.Pool(self.Nworker) as pool:
-            res = list(tqdm(pool.imap(process_one_module, jobs), total=len(self.h5list)))
+        with parallel_backend('threading', n_jobs=self.Nworker):
+            res = Parallel( verbose=20)(
+                delayed(process_one_module)(job) for job in tqdm(jobs)
+            )
         
         print('finished:', strftime('%X'))