270 |
270 |
271 # Create queues |
271 # Create queues |
272 taskQueue = multiprocessing.Queue() |
272 taskQueue = multiprocessing.Queue() |
273 doneQueue = multiprocessing.Queue() |
273 doneQueue = multiprocessing.Queue() |
274 |
274 |
275 # Submit tasks |
275 # Submit tasks (initially two times the number of processes) |
276 for file in files: |
276 tasks = len(files) |
|
277 initialTasks = 2 * NumberOfProcesses |
|
278 for _ in range(initialTasks): |
|
279 file = files.pop(0) |
277 relSrc = self.__project.getRelativePath(str(file)) if self.__project else "" |
280 relSrc = self.__project.getRelativePath(str(file)) if self.__project else "" |
278 taskQueue.put((file, relSrc)) |
281 taskQueue.put((file, relSrc)) |
279 |
282 |
280 # Start worker processes |
283 # Start worker processes |
281 workers = [ |
284 workers = [ |
287 ] |
290 ] |
288 for worker in workers: |
291 for worker in workers: |
289 worker.start() |
292 worker.start() |
290 |
293 |
291 # Get the results from the worker tasks |
294 # Get the results from the worker tasks |
292 for _ in range(len(files)): |
295 for _ in range(tasks): |
293 result = doneQueue.get() |
296 result = doneQueue.get() |
294 self.__handleBlackFormattingResult( |
297 self.__handleBlackFormattingResult( |
295 result.status, result.filename, result.data |
298 result.status, result.filename, result.data |
296 ) |
299 ) |
297 |
300 |
298 if self.__cancelled: |
301 if self.__cancelled: |
299 break |
302 break |
300 |
303 |
301 if self.__cancelled: |
304 if files: |
302 for worker in workers: |
305 file = files.pop(0) |
303 worker.terminate() |
306 relSrc = ( |
304 else: |
307 self.__project.getRelativePath(str(file)) if self.__project else "" |
305 # Tell child processes to stop |
308 ) |
306 for _ in range(NumberOfProcesses): |
309 taskQueue.put((file, relSrc)) |
307 taskQueue.put("STOP") |
310 |
|
311 # Tell child processes to stop |
|
312 for _ in range(NumberOfProcesses): |
|
313 taskQueue.put("STOP") |
308 |
314 |
309 for worker in workers: |
315 for worker in workers: |
310 worker.join() |
316 worker.join() |
311 worker.close() |
317 worker.close() |
312 |
318 |