Tracking progress of joblib.Parallel execution

后端 未结 8 838
隐瞒了意图╮
隐瞒了意图╮ 2020-12-24 12:08

Is there a simple way to track the overall progress of a joblib.Parallel execution?

I have a long-running execution composed of thousands of jobs, which I want to tr

8条回答
  •  星月不相逢
    2020-12-24 12:27

    Text progress bar

    One more variant for those, who want text progress bar without additional modules like tqdm. Actual for joblib=0.11, python 3.5.2 on linux at 16.04.2018 and shows progress upon subtask completion.

    Redefine native class:

    class BatchCompletionCallBack(object):
        # Added code - start
        global total_n_jobs
        # Added code - end
        def __init__(self, dispatch_timestamp, batch_size, parallel):
            self.dispatch_timestamp = dispatch_timestamp
            self.batch_size = batch_size
            self.parallel = parallel
    
        def __call__(self, out):
            self.parallel.n_completed_tasks += self.batch_size
            this_batch_duration = time.time() - self.dispatch_timestamp
    
            self.parallel._backend.batch_completed(self.batch_size,
                                               this_batch_duration)
            self.parallel.print_progress()
            # Added code - start
            progress = self.parallel.n_completed_tasks / total_n_jobs
            print(
                "\rProgress: [{0:50s}] {1:.1f}%".format('#' * int(progress * 50), progress*100)
                , end="", flush=True)
            if self.parallel.n_completed_tasks == total_n_jobs:
                print('\n')
            # Added code - end
            if self.parallel._original_iterator is not None:
                self.parallel.dispatch_next()
    
    import joblib.parallel
    joblib.parallel.BatchCompletionCallBack = BatchCompletionCallBack
    

    Define global constant before usage with total number of jobs:

    total_n_jobs = 10
    

    This will result in something like this:

    Progress: [########################################          ] 80.0%
    

提交回复
热议问题