ATLAS Offline Software
ConcurrencyFlags.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
2 
3 #=======================================================================
4 # File: AthenaCommon/python/ConcurrencyFlags.py
5 #=======================================================================
6 """ Flags for concurrency
7 """
8 #
9 #
10 __author__ = 'Charles Leggett'
11 __version__="$Revision: 1.0 $"
12 __doc__="concurrency flags "
13 
14 
15 
16 
17 #=======================================================================
18 # imports
19 #=======================================================================
20 from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer
21 from AthenaCommon.JobProperties import jobproperties
22 
23 class NumProcs(JobProperty):
24  """ Flag to indicate number of parallel workers"
25  """
26  statusOn = True
27  allowedTypes = ['int']
28  StoredValue = 0
29  def _do_action(self):
30  import multiprocessing
31  if (self.get_Value() == -1):
32  self.set_Value( multiprocessing.cpu_count() )
33  elif ( self.get_Value() < -1 ) :
34  from AthenaCommon.Logging import log
35  log.fatal("nprocs cannot be < -1")
36  import sys
37  from AthenaCommon import ExitCodes
38  sys.exit(ExitCodes.CONFIGURATION_ERROR)
39  elif (self.get_Value() > multiprocessing.cpu_count()):
40  from AthenaCommon.Logging import log
41  log.warning("nprocs is larger than core count [%s]!",
42  multiprocessing.cpu_count())
43 
44  return
45 
46 class NumThreads(JobProperty):
47  """ Flag to indicate number of concurrent threads, possibly per worker"
48  """
49  statusOn = True
50  allowedTypes = ['int']
51  StoredValue = 0
52 
53  def _do_action(self):
54  try:
55  import GaudiHive # noqa: F401
56  except ImportError:
57  from AthenaCommon.Logging import log
58  log.fatal("GaudiHive not in release - can't use --threads parameter")
59  import sys
60  from AthenaCommon import ExitCodes
61  sys.exit(ExitCodes.IMPORT_ERROR)
62 
63  if (self.get_Value() < 0):
64  from AthenaCommon.Logging import log
65  log.fatal("Number of threads [%s] cannot be negative",self.get_Value())
66  import sys
67  from AthenaCommon import ExitCodes
68  sys.exit(ExitCodes.CONFIGURATION_ERROR)
69 
70  return
71 
72 
73 class NumConcurrentEvents(JobProperty):
74  """ Flag to indicate number of concurrent events, possibly per worker"
75  """
76  statusOn = True
77  allowedTypes = ['int']
78  StoredValue = 0
79 
80  def _do_action(self):
81  try:
82  import GaudiHive # noqa: F401
83  except ImportError:
84  from AthenaCommon.Logging import log
85  log.fatal("GaudiHive not in release - can't use --concurrent-events parameter")
86  import sys
87  from AthenaCommon import ExitCodes
88  sys.exit(ExitCodes.IMPORT_ERROR)
89 
90  if (self.get_Value() < 0):
91  from AthenaCommon.Logging import log
92  log.fatal("Number of concurrent events [%s] cannot be negative",self.get_Value())
93  import sys
94  from AthenaCommon import ExitCodes
95  sys.exit(ExitCodes.CONFIGURATION_ERROR)
96 
97  return
98 
99 
100 class DebugWorkers(JobProperty):
101  """ stops the worker in bootstratp until a SIGUSR1 is recieved. Used as debug hook
102  """
103  statusOn = True
104  allowedTypes = ['bool']
105  StoredValue = False
106 
107 
108 class ConcurrencyFlags(JobPropertyContainer):
109  """ The global ConcurrencyFlags job property container.
110  """
111  pass
112 
113 # add the concurrency flags container to the top container
114 jobproperties.add_Container(ConcurrencyFlags)
115 
116 # I want always the following flags in the Concurrency container
117 list_jobproperties = [
118  NumProcs,
119  NumThreads,
120  NumConcurrentEvents,
121  DebugWorkers,
122 ]
123 
124 for i in list_jobproperties:
125  jobproperties.ConcurrencyFlags.add_JobProperty(i)
126 
127 del list_jobproperties
128 
129 #=======================================================================
python.ConcurrencyFlags.NumProcs
Definition: ConcurrencyFlags.py:23
python.ConcurrencyFlags.NumConcurrentEvents._do_action
def _do_action(self)
Definition: ConcurrencyFlags.py:80
python.ConcurrencyFlags.ConcurrencyFlags
Definition: ConcurrencyFlags.py:108
python.ConcurrencyFlags.NumThreads
Definition: ConcurrencyFlags.py:46
python.ConcurrencyFlags.NumThreads._do_action
def _do_action(self)
Definition: ConcurrencyFlags.py:53
python.ConcurrencyFlags.NumConcurrentEvents
Definition: ConcurrencyFlags.py:73
python.ConcurrencyFlags.DebugWorkers
Definition: ConcurrencyFlags.py:100
python.ConcurrencyFlags.NumProcs._do_action
def _do_action(self)
Definition: ConcurrencyFlags.py:29