(run, ls, n_workers, use_threads)
| 103 | return flatten(self.result_list) |
| 104 | |
| 105 | def run_parallel(run, ls, n_workers, use_threads): |
| 106 | from joblib import Parallel, delayed |
| 107 | from .thread_with_result import ThreadWithResult |
| 108 | import sys |
| 109 | |
| 110 | if use_threads: |
| 111 | execute_parallel_tasks = lambda: Parallel(n_jobs=n_workers, backend="threading")( |
| 112 | delayed(run)(l) for l in ls |
| 113 | ) |
| 114 | else: |
| 115 | execute_parallel_tasks = lambda: Parallel(n_jobs=n_workers)( |
| 116 | delayed(run)(l) for l in ls |
| 117 | ) |
| 118 | |
| 119 | parallel_thread = ThreadWithResult(target=execute_parallel_tasks, daemon=True) |
| 120 | parallel_thread.start() |
| 121 | try: |
| 122 | while parallel_thread.is_alive(): |
| 123 | parallel_thread.join(0.2) # time out not to block KeyboardInterrupt |
| 124 | except KeyboardInterrupt: |
| 125 | sys.exit(1) |
| 126 | |
| 127 | return parallel_thread.result |
| 128 | |
| 129 | |
| 130 | class AsyncResult: |
no test coverage detected