CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
Vispa.Share.ThreadChain.ThreadChain Class Reference
Inheritance diagram for Vispa.Share.ThreadChain.ThreadChain:

Public Member Functions

def __init__ (self, command=None, attr)
 
def addCommand (self, command, attr)
 
def clearReturnValue (self, command)
 
def clearReturnValues (self)
 
def returnValue (self, id=None)
 
def run (self)
 
def start (self)
 

Private Attributes

 _commandCounter
 
 _commandTuples
 
 _returnValues
 

Detailed Description

Holds a list of commands that shall be executed in one Thread in a chain.

    The chain can run in two modes: Eighter it receives a command with optional attributes on construction. The return value can be accessed by calling returnValue() without arguments.
    In the second mode the constructor does not receive any arguments and commands are passed to the chain with addComand().
    This function returns an id unique for the command making the return value of the command available through retrunValue(id).
    Start the ThreadChain using start().
    
    One can check if the thread is still running using isRunning().
    When all commands are executed a signal "finishedThreadChain" will be emitted.

Definition at line 5 of file ThreadChain.py.

Constructor & Destructor Documentation

def Vispa.Share.ThreadChain.ThreadChain.__init__ (   self,
  command = None,
  attr 
)

Definition at line 17 of file ThreadChain.py.

17  def __init__(self, command=None, *attr):
18  QThread.__init__(self, None)
19  self._commandTuples = []
20  self._commandCounter = -1
21  self._returnValues = {}
22  if command:
23  self.addCommand(command, *attr)
24  self.start()
25 
def addCommand(self, command, attr)
Definition: ThreadChain.py:26
def __init__(self, command=None, attr)
Definition: ThreadChain.py:17

Member Function Documentation

def Vispa.Share.ThreadChain.ThreadChain.addCommand (   self,
  command,
  attr 
)
Adds a command to this ThreadChain 

and returns an id which is required to obtain the return value of this command.

*attr is a optional tuple of arguments which will be passed to the command on execution.

Definition at line 26 of file ThreadChain.py.

References Vispa.Share.ThreadChain.ThreadChain._commandCounter, Vispa.Share.ThreadChain.ThreadChain._commandTuples, Vispa.Share.ThreadChain.ThreadChain._returnValues, edm::signalslot::Signal< void(const std::string &, const std::string &)>.emit(), edm::signalslot::Signal< void(service::SystemBounds const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &)>.emit(), edm::signalslot::Signal< void(const std::string &, const edmplugin::PluginInfo &)>.emit(), edm::signalslot::Signal< void(TerminationOrigin)>.emit(), edm::signalslot::Signal< void(StreamContext const &, PathContext const &, HLTPathStatus const &)>.emit(), edm::signalslot::Signal< void(edm::StreamContext const &, edm::ModuleCallingContext const &)>.emit(), edm::signalslot::Signal< void()>.emit(), edm::signalslot::Signal< void(std::string const &, bool)>.emit(), edm::signalslot::Signal< void(RunIndex)>.emit(), edm::signalslot::Signal< void(GlobalContext const &, ModuleCallingContext const &)>.emit(), edm::signalslot::Signal< void(eventsetup::ComponentDescription const *, eventsetup::EventSetupRecordKey const &, eventsetup::DataKey const &)>.emit(), edm::signalslot::Signal< void(LuminosityBlockIndex)>.emit(), edm::signalslot::Signal< void(const edmplugin::SharedLibrary &)>.emit(), edm::signalslot::Signal< void(edm::BranchDescription const &)>.emit(), edm::signalslot::Signal< void(GlobalContext const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &, PathContext const &)>.emit(), edm::signalslot::Signal< void(GlobalContext const &, TerminationOrigin)>.emit(), edm::signalslot::Signal< void(const boost::filesystem::path &)>.emit(), edm::signalslot::Signal< void(const edmplugin::PluginFactoryBase *)>.emit(), edm::signalslot::Signal< void(PathsAndConsumesOfModulesBase const &, ProcessContext const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &, TerminationOrigin)>.emit(), edm::signalslot::Signal< void(ModuleDescription const &)>.emit(), edm::signalslot::Signal< T >.emit(), edm::signalslot::Signal< void(StreamID)>.emit(), and Signal< void(BranchDescription const &)>.emit().

26  def addCommand(self, command, *attr):
27  """ Adds a command to this ThreadChain
28 
29  and returns an id which is required to obtain the return value of this command.
30 
31  *attr is a optional tuple of arguments which will be passed to the command on execution.
32  """
33  self._commandCounter += 1
34  id = self._commandCounter
35  self._commandTuples += [(id, command, attr)]
36  if self.NO_THREADS_FLAG:
37  self._returnValues[id] = command.__call__(*attr)
38  self.emit(SIGNAL('finishedThreadChain'), self._returnValues.values())
39  return
40 
def addCommand(self, command, attr)
Definition: ThreadChain.py:26
def Vispa.Share.ThreadChain.ThreadChain.clearReturnValue (   self,
  command 
)

Definition at line 44 of file ThreadChain.py.

44  def clearReturnValue(self, command):
45  if command in self._returnValues.keys():
46  self._returnValues.pop(command)
47  return True
48  return False
49 
def clearReturnValue(self, command)
Definition: ThreadChain.py:44
def Vispa.Share.ThreadChain.ThreadChain.clearReturnValues (   self)

Definition at line 41 of file ThreadChain.py.

41  def clearReturnValues(self):
42  self._returnValues.clear()
43 
def Vispa.Share.ThreadChain.ThreadChain.returnValue (   self,
  id = None 
)
Returns return value of command with given id.

The id is returned by addCommand().
If id is None the return value of the last command will be returned.

Definition at line 50 of file ThreadChain.py.

References Vispa.Share.ThreadChain.ThreadChain._returnValues.

50  def returnValue(self, id=None):
51  """ Returns return value of command with given id.
52 
53  The id is returned by addCommand().
54  If id is None the return value of the last command will be returned.
55  """
56  if id in self._returnValues.keys():
57  return self._returnValues[id]
58  valueLength = len(self._returnValues)
59  if valueLength == 0:
60  return []
61  # TODO: maybe raise exception to distinguish from None return value?
62  return self._returnValues[self._returnValues.keys()[valueLength-1]]
63 
def Vispa.Share.ThreadChain.ThreadChain.run (   self)

Definition at line 70 of file ThreadChain.py.

References Vispa.Share.ThreadChain.ThreadChain._commandTuples, Vispa.Share.ThreadChain.ThreadChain._returnValues, edm::signalslot::Signal< void(StreamID)>.emit(), edm::signalslot::Signal< void(const std::string &, const std::string &)>.emit(), edm::signalslot::Signal< void(service::SystemBounds const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &)>.emit(), edm::signalslot::Signal< void(const std::string &, const edmplugin::PluginInfo &)>.emit(), edm::signalslot::Signal< void(TerminationOrigin)>.emit(), edm::signalslot::Signal< void(StreamContext const &, PathContext const &, HLTPathStatus const &)>.emit(), edm::signalslot::Signal< void(edm::StreamContext const &, edm::ModuleCallingContext const &)>.emit(), edm::signalslot::Signal< void()>.emit(), edm::signalslot::Signal< void(std::string const &, bool)>.emit(), edm::signalslot::Signal< void(RunIndex)>.emit(), edm::signalslot::Signal< void(GlobalContext const &, ModuleCallingContext const &)>.emit(), edm::signalslot::Signal< void(eventsetup::ComponentDescription const *, eventsetup::EventSetupRecordKey const &, eventsetup::DataKey const &)>.emit(), edm::signalslot::Signal< void(LuminosityBlockIndex)>.emit(), edm::signalslot::Signal< void(const edmplugin::SharedLibrary &)>.emit(), edm::signalslot::Signal< void(edm::BranchDescription const &)>.emit(), edm::signalslot::Signal< void(GlobalContext const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &, PathContext const &)>.emit(), edm::signalslot::Signal< void(GlobalContext const &, TerminationOrigin)>.emit(), edm::signalslot::Signal< void(const boost::filesystem::path &)>.emit(), edm::signalslot::Signal< void(const edmplugin::PluginFactoryBase *)>.emit(), edm::signalslot::Signal< void(PathsAndConsumesOfModulesBase const &, ProcessContext const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)>.emit(), edm::signalslot::Signal< void(StreamContext const &, TerminationOrigin)>.emit(), edm::signalslot::Signal< void(ModuleDescription const &)>.emit(), edm::signalslot::Signal< T >.emit(), and Signal< void(BranchDescription const &)>.emit().

Referenced by Types.EventID.cppID(), and Types.LuminosityBlockID.cppID().

70  def run(self):
71  if self.NO_THREADS_FLAG:
72  return
73  while self._commandTuples != []:
74  id, command, attr = self._commandTuples.pop(0)
75  self._returnValues[id] = command.__call__(*attr)
76 
77  # signal contains list of return values
78  # for compatibility with old implementation
79  self.emit(SIGNAL('finishedThreadChain'), self._returnValues.values())
def Vispa.Share.ThreadChain.ThreadChain.start (   self)

Definition at line 64 of file ThreadChain.py.

References CSGContinuousAction.isRunning().

Referenced by progressbar.ProgressBar.__next__(), Types.LuminosityBlockRange.cppID(), and Types.EventRange.cppID().

64  def start(self):
65  if self.NO_THREADS_FLAG:
66  return
67  if not self.isRunning():
68  QThread.start(self)
69 

Member Data Documentation

Vispa.Share.ThreadChain.ThreadChain._commandCounter
private

Definition at line 20 of file ThreadChain.py.

Referenced by Vispa.Share.ThreadChain.ThreadChain.addCommand().

Vispa.Share.ThreadChain.ThreadChain._commandTuples
private
Vispa.Share.ThreadChain.ThreadChain._returnValues
private