|
12 | 12 | from multiprocessing import Process, Pool, cpu_count, pool
|
13 | 13 | from traceback import format_exception
|
14 | 14 | import sys
|
| 15 | +from logging import INFO |
15 | 16 | import gc
|
16 | 17 |
|
17 | 18 | from copy import deepcopy
|
18 | 19 | import numpy as np
|
19 |
| - |
20 | 20 | from ... import logging
|
21 | 21 | from ...utils.profiler import get_system_total_memory_gb
|
22 | 22 | from ..engine import MapNode
|
23 | 23 | from .base import DistributedPluginBase
|
24 | 24 |
|
| 25 | +try: |
| 26 | + from textwrap import indent |
| 27 | +except ImportError: |
| 28 | + def indent(text, prefix): |
| 29 | + """ A textwrap.indent replacement for Python < 3.3 """ |
| 30 | + if not prefix: |
| 31 | + return text |
| 32 | + splittext = text.splitlines(True) |
| 33 | + return prefix + prefix.join(splittext) |
| 34 | + |
25 | 35 | # Init logger
|
26 | 36 | logger = logging.getLogger('workflow')
|
27 | 37 |
|
@@ -129,7 +139,7 @@ def __init__(self, plugin_args=None):
|
129 | 139 | True)
|
130 | 140 |
|
131 | 141 | # Instantiate different thread pools for non-daemon processes
|
132 |
| - logger.debug('MultiProcPlugin starting in "%sdaemon" mode (n_procs=%d,' |
| 142 | + logger.debug('[MultiProc] Starting in "%sdaemon" mode (n_procs=%d, ' |
133 | 143 | 'mem_gb=%0.2f)', 'non' * int(non_daemon), self.processors,
|
134 | 144 | self.memory_gb)
|
135 | 145 |
|
@@ -162,7 +172,7 @@ def _submit_job(self, node, updatehash=False):
|
162 | 172 | run_node, (node, updatehash, self._taskid),
|
163 | 173 | callback=self._async_callback)
|
164 | 174 |
|
165 |
| - logger.debug('MultiProc submitted task %s (taskid=%d).', |
| 175 | + logger.debug('[MultiProc] Submitted task %s (taskid=%d).', |
166 | 176 | node.fullname, self._taskid)
|
167 | 177 | return self._taskid
|
168 | 178 |
|
@@ -219,9 +229,19 @@ def _send_procs_to_workers(self, updatehash=False, graph=None):
|
219 | 229 | stats = (len(self.pending_tasks), len(jobids), free_memory_gb,
|
220 | 230 | self.memory_gb, free_processors, self.processors)
|
221 | 231 | if self._stats != stats:
|
222 |
| - logger.info('Currently running %d tasks, and %d jobs ready. Free ' |
223 |
| - 'memory (GB): %0.2f/%0.2f, Free processors: %d/%d', |
224 |
| - *stats) |
| 232 | + tasks_list_msg = '' |
| 233 | + |
| 234 | + if logger.level <= INFO: |
| 235 | + running_tasks = [' * %s' % self.procs[jobid].fullname |
| 236 | + for _, jobid in self.pending_tasks] |
| 237 | + if running_tasks: |
| 238 | + tasks_list_msg = '\nCurrently running:\n' |
| 239 | + tasks_list_msg += '\n'.join(running_tasks) |
| 240 | + tasks_list_msg = indent(tasks_list_msg, ' ' * 21) |
| 241 | + logger.info('[MultiProc] Running %d tasks, and %d jobs ready. Free ' |
| 242 | + 'memory (GB): %0.2f/%0.2f, Free processors: %d/%d.%s', |
| 243 | + len(self.pending_tasks), len(jobids), free_memory_gb, self.memory_gb, |
| 244 | + free_processors, self.processors, tasks_list_msg) |
225 | 245 | self._stats = stats
|
226 | 246 |
|
227 | 247 | if free_memory_gb < 0.01 or free_processors == 0:
|
|
0 commit comments