def METHOD_NAME(scripts: List[str], multiply: int = 1, run_directory: str = None):
    script_fail_count = Counter()
    script_succ_count = Counter()
    # Run each script for multiple times
    script_ids = [(script, i) for script in scripts for i in range(multiply)]
    port_offset_pool = PortOffsetPool(MAX_JOBS)
    def error_callback(port_offset, script, err):
        port_offset_pool.release(port_offset)
        script_fail_count[script] += 1
        if script_succ_count[script] + script_fail_count[script] == multiply:
            color = _COLOR_PASS if script_fail_count[script] == 0 else _COLOR_FAIL
            print(f'{color}PASS {script_succ_count[script]} FAIL {script_fail_count[script]}{_COLOR_NONE} {script}')
    def pass_callback(port_offset, script):
        port_offset_pool.release(port_offset)
        script_succ_count[script] += 1
        if script_succ_count[script] + script_fail_count[script] == multiply:
            color = _COLOR_PASS if script_fail_count[script] == 0 else _COLOR_FAIL
            print(f'{color}PASS {script_succ_count[script]} FAIL {script_fail_count[script]}{_COLOR_NONE} {script}')
    for script, i in script_ids:
        port_offset = port_offset_pool.allocate()
        pool.apply_async(
            run_cert, [i, port_offset, script, run_directory],
            callback=lambda ret, port_offset=port_offset, script=script: pass_callback(port_offset, script),
            error_callback=lambda err, port_offset=port_offset, script=script: error_callback(
                port_offset, script, err))
    pool.close()
    pool.join()
    return sum(script_fail_count.values())