util.py 949 字节
Newer Older
1
import contextlib
2
import multiprocessing
3 4
import os
import shutil
I
Ivan Blinkov 已提交
5
import sys
6
import tempfile
7
import threading
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25


@contextlib.contextmanager
def temp_dir():
    path = tempfile.mkdtemp(dir=os.environ.get('TEMP'))
    try:
        yield path
    finally:
        shutil.rmtree(path)


@contextlib.contextmanager
def autoremoved_file(path):
    try:
        with open(path, 'w') as handle:
            yield handle
    finally:
        os.unlink(path)
26 27 28 29


def run_function_in_parallel(func, args_list, threads=False):
    processes = []
I
Ivan Blinkov 已提交
30
    exit_code = 0
31 32 33 34 35 36
    for task in args_list:
        cls = threading.Thread if threads else multiprocessing.Process
        processes.append(cls(target=func, args=task))
        processes[-1].start()
    for process in processes:
        process.join()
I
Ivan Blinkov 已提交
37 38 39 40 41
        if not threads:
            if process.exitcode and not exit_code:
                exit_code = process.exitcode
    if exit_code:
        sys.exit(exit_code)