From e987c136e8bbe27a5ff3cc6ceec417b963a6ac1f Mon Sep 17 00:00:00 2001
From: asetGem <amandine.perrin@pasteur.fr>
Date: Mon, 8 Mar 2021 11:33:55 +0100
Subject: [PATCH] Change clustering progressbar stategy
Before, we used a pool of size 1 to run mmseqs_clust inside, and showed a progress bar in the main thread.
Now, run_mmseqs_clust runs in the main thread, and a progressbar is running in a separate thread, that is stoped when mmseqs_clust has finished.
---
PanACoTA/pangenome_module/mmseqs_functions.py | 39 +++++++++++--------
1 file changed, 23 insertions(+), 16 deletions(-)
diff --git a/PanACoTA/pangenome_module/mmseqs_functions.py b/PanACoTA/pangenome_module/mmseqs_functions.py
index 89d9cd34..6bdfba1f 100755
--- a/PanACoTA/pangenome_module/mmseqs_functions.py
+++ b/PanACoTA/pangenome_module/mmseqs_functions.py
@@ -41,8 +41,9 @@ April 2017
"""
import logging
import os
+import sys
import time
-import multiprocessing
+import threading
import progressbar
import copy
@@ -202,21 +203,27 @@ def do_pangenome(outdir, prt_bank, mmseqdb, min_id, clust_mode, threads, start,
"it to a pangenome file.").format(mmseqclust))
else:
logger.info("Clustering proteins...")
- if not quiet:
- widgets = [progressbar.BouncingBar(marker=progressbar.RotatingMarker(markers="◐◓◑◒")),
- " - ", progressbar.Timer()]
- bar = progressbar.ProgressBar(widgets=widgets, max_value=20, term_width=50)
- pool = multiprocessing.Pool(1)
- args = [mmseqdb, mmseqclust, tmpdir, logmmseq, min_id, threads, clust_mode]
- final = pool.map_async(run_mmseqs_clust, [args], chunksize=1)
- pool.close()
- if not quiet:
- while True:
- if final.ready():
- break
- bar.update()
- bar.finish()
- pool.join()
+ try:
+ stop_bar = False
+ if quiet:
+ widgets = []
+ # If not quiet, start a progress bar while clustering proteins. We cannot guess
+ # how many time it will take, so we start an "infinite" bar, and send it a signal
+ # when it has to stop. If quiet, we start a thread that will immediatly stop
+ else:
+ widgets = [progressbar.BouncingBar(marker=progressbar.RotatingMarker(markers="◐◓◑◒")),
+ " - ", progressbar.Timer()]
+ x = threading.Thread(target=utils.thread_progressbar, args=(widgets, lambda : stop_bar,))
+ x.start()
+ args = (mmseqdb, mmseqclust, tmpdir, logmmseq, min_id, threads, clust_mode)
+ run_mmseqs_clust(args)
+ except KeyboardInterrupt: # pragma: no cover
+ stop_bar = True
+ x.join()
+ sys.exit(1)
+ # Clustering done, stop bar and join (if quiet, it was already finished, so we just join it)
+ stop_bar = True
+ x.join()
# Convert output to tsv file (one line per comparison done)
# # Convert output to tsv file (one line per comparison done)
# -> returns (families, outfile)
--
GitLab