多线程执行类
| 143 | |
| 144 | |
| 145 | class ThreadRunner(object): |
| 146 | """多线程执行类""" |
| 147 | |
| 148 | def __init__(self, cmd_args, regex_client, source_dir, rules): |
| 149 | self.cmd_args = cmd_args |
| 150 | self.regex_client = regex_client |
| 151 | self.source_dir = source_dir |
| 152 | self.rules = rules |
| 153 | self.issues = [] |
| 154 | self.mutex = threading.Lock() # 线程锁,访问全局变量时需要上锁 |
| 155 | |
| 156 | def __scan_file_callback__(self, file_path): |
| 157 | file_result = CpplintRunner().run_cpplint_on_file( |
| 158 | file_path, self.cmd_args, self.regex_client, self.source_dir, self.rules |
| 159 | ) |
| 160 | self.mutex.acquire() # 上锁 |
| 161 | self.issues.extend(file_result) |
| 162 | self.mutex.release() # 解锁 |
| 163 | |
| 164 | def run(self, file_paths): |
| 165 | callback_queue = CallbackQueue(min_threads=20, max_threads=1000) |
| 166 | for path in file_paths: |
| 167 | callback_queue.append(self.__scan_file_callback__, path) |
| 168 | callback_queue.wait_for_all_callbacks_to_be_execute_and_destroy() |
| 169 | return self.issues |
| 170 | |
| 171 | |
| 172 | class Cpplint(CodeLintModel): |