110 (bool), fixed (bool), autofixing (bool), fixedMsg (str))) |
110 (bool), fixed (bool), autofixing (bool), fixedMsg (str))) |
111 """ |
111 """ |
112 return __checkCodeStyle(filename, source, args) |
112 return __checkCodeStyle(filename, source, args) |
113 |
113 |
114 |
114 |
115 def codeStyleBatchCheck(argumentsList, send, fx): |
115 def codeStyleBatchCheck(argumentsList, send, fx, cancelled): |
116 """ |
116 """ |
117 Module function to check code style for a batch of files. |
117 Module function to check code style for a batch of files. |
118 |
118 |
119 @param argumentsList list of arguments tuples as given for codeStyleCheck |
119 @param argumentsList list of arguments tuples as given for codeStyleCheck |
120 @param send reference to send method |
120 @param send reference to send function (function) |
121 @param fx registered service name (string) |
121 @param fx registered service name (string) |
|
122 @param cancelled reference to function checking for a cancellation |
|
123 (function) |
122 """ |
124 """ |
123 try: |
125 try: |
124 NumberOfProcesses = multiprocessing.cpu_count() |
126 NumberOfProcesses = multiprocessing.cpu_count() |
|
127 if NumberOfProcesses >= 1: |
|
128 NumberOfProcesses -= 1 |
125 except NotImplementedError: |
129 except NotImplementedError: |
126 NumberOfProcesses = 4 |
130 NumberOfProcesses = 1 |
127 |
131 |
128 # Create queues |
132 # Create queues |
129 taskQueue = multiprocessing.Queue() |
133 taskQueue = multiprocessing.Queue() |
130 doneQueue = multiprocessing.Queue() |
134 doneQueue = multiprocessing.Queue() |
131 |
135 |
132 # Submit tasks |
136 # Submit tasks (initially two time number of processes |
133 for task in argumentsList: |
137 initialTasks = 2 * NumberOfProcesses |
|
138 for task in argumentsList[:initialTasks]: |
134 taskQueue.put(task) |
139 taskQueue.put(task) |
135 |
140 |
136 # Start worker processes |
141 # Start worker processes |
137 for i in range(NumberOfProcesses): |
142 for i in range(NumberOfProcesses): |
138 multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\ |
143 multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\ |
139 .start() |
144 .start() |
140 |
145 |
141 # Get and send results |
146 # Get and send results |
|
147 endIndex = len(argumentsList) - initialTasks |
142 for i in range(len(argumentsList)): |
148 for i in range(len(argumentsList)): |
143 filename, result = doneQueue.get() |
149 filename, result = doneQueue.get() |
144 send(fx, filename, result) |
150 send(fx, filename, result) |
|
151 if cancelled(): |
|
152 # just exit the loop ignoring the results of queued tasks |
|
153 break |
|
154 if i < endIndex: |
|
155 taskQueue.put(argumentsList[i + initialTasks]) |
145 |
156 |
146 # Tell child processes to stop |
157 # Tell child processes to stop |
147 for i in range(NumberOfProcesses): |
158 for i in range(NumberOfProcesses): |
148 taskQueue.put('STOP') |
159 taskQueue.put('STOP') |
149 |
160 |