| Index: webrtc/tools/barcode_tools/helper_functions.py
|
| diff --git a/webrtc/tools/barcode_tools/helper_functions.py b/webrtc/tools/barcode_tools/helper_functions.py
|
| index bb0b167334c51f447f2b75cca2d2163ce1aa56d4..fb9854f8a3397e457b1a8a2273fa9c3e093e611c 100644
|
| --- a/webrtc/tools/barcode_tools/helper_functions.py
|
| +++ b/webrtc/tools/barcode_tools/helper_functions.py
|
| @@ -7,6 +7,7 @@
|
| # in the file PATENTS. All contributing project authors may
|
| # be found in the AUTHORS file in the root of the source tree.
|
|
|
| +import multiprocessing
|
| import os
|
| import subprocess
|
| import sys
|
| @@ -64,8 +65,7 @@ def perform_action_on_all_files(directory, file_pattern, file_extension,
|
| """Function that performs a given action on all files matching a pattern.
|
|
|
| It is assumed that the files are named file_patternxxxx.file_extension, where
|
| - xxxx are digits. The file names start from
|
| - file_patern0..start_number>.file_extension.
|
| + xxxx are digits starting from start_number.
|
|
|
| Args:
|
| directory(string): The directory where the files live.
|
| @@ -73,24 +73,33 @@ def perform_action_on_all_files(directory, file_pattern, file_extension,
|
| file_extension(string): The files' extension.
|
| start_number(int): From where to start to count frames.
|
| action(function): The action to be performed over the files. Must return
|
| - False if the action failed, True otherwise.
|
| + False if the action failed, True otherwise. It should take a file name
|
| + as the first argument and **kwargs as arguments. The function must be
|
| + possible to pickle, so it cannot be a bound function (for instance).
|
|
|
| Return:
|
| (bool): Whether performing the action over all files was successful or not.
|
| """
|
| file_prefix = os.path.join(directory, file_pattern)
|
| - file_exists = True
|
| file_number = start_number
|
| - errors = False
|
|
|
| - while file_exists:
|
| + process_pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
|
| + results = []
|
| + while True:
|
| zero_padded_file_number = zero_pad(file_number)
|
| file_name = file_prefix + zero_padded_file_number + '.' + file_extension
|
| - if os.path.isfile(file_name):
|
| - if not action(file_name=file_name, **kwargs):
|
| - errors = True
|
| - break
|
| - file_number += 1
|
| - else:
|
| - file_exists = False
|
| - return not errors
|
| + if not os.path.isfile(file_name):
|
| + break
|
| + future = process_pool.apply_async(action, args=(file_name,), kwds=kwargs)
|
| + results.append(future)
|
| + file_number += 1
|
| +
|
| + successful = True
|
| + for result in results:
|
| + if not result.get():
|
| + print "At least one action %s failed for files %sxxxx.%s." % (
|
| + action, file_pattern, file_extension)
|
| + successful = False
|
| +
|
| + process_pool.close()
|
| + return successful
|
|
|