mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-07 12:30:57 +00:00
a5a5f8ef6f
We weren't installing opt-viewer and co before, this fixes the omission. I am also moving the tools from utils/ to tools/. I believe that this is more appropriate since these tools have matured greatly in the past year through contributions by multiple people (thanks!) so they are ready to become external tools. The tools are installed under <install>/share/opt-viewer/. I am *not* adding the llvm- prefix. If people feel strongly about adding that, this is probably a good time since the new location will require some mental adjustment anyway. Fixes PR33521 Differential Revision: https://reviews.llvm.org/D35048 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307285 91177308-0d34-0410-b5e6-96231b3b80d8
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import sys
|
|
import multiprocessing
|
|
|
|
|
|
_current = None
|
|
_total = None
|
|
|
|
|
|
def _init(current, total):
|
|
global _current
|
|
global _total
|
|
_current = current
|
|
_total = total
|
|
|
|
|
|
def _wrapped_func(func_and_args):
|
|
func, argument, should_print_progress = func_and_args
|
|
|
|
if should_print_progress:
|
|
with _current.get_lock():
|
|
_current.value += 1
|
|
sys.stdout.write('\r\t{} of {}'.format(_current.value, _total.value))
|
|
|
|
return func(argument)
|
|
|
|
|
|
def pmap(func, iterable, processes, should_print_progress, *args, **kwargs):
|
|
"""
|
|
A parallel map function that reports on its progress.
|
|
|
|
Applies `func` to every item of `iterable` and return a list of the
|
|
results. If `processes` is greater than one, a process pool is used to run
|
|
the functions in parallel. `should_print_progress` is a boolean value that
|
|
indicates whether a string 'N of M' should be printed to indicate how many
|
|
of the functions have finished being run.
|
|
"""
|
|
global _current
|
|
global _total
|
|
_current = multiprocessing.Value('i', 0)
|
|
_total = multiprocessing.Value('i', len(iterable))
|
|
|
|
func_and_args = [(func, arg, should_print_progress,) for arg in iterable]
|
|
if processes <= 1:
|
|
result = map(_wrapped_func, func_and_args, *args, **kwargs)
|
|
else:
|
|
pool = multiprocessing.Pool(initializer=_init,
|
|
initargs=(_current, _total,),
|
|
processes=processes)
|
|
result = pool.map(_wrapped_func, func_and_args, *args, **kwargs)
|
|
|
|
if should_print_progress:
|
|
sys.stdout.write('\r')
|
|
return result
|