LSSTApplications  8.0.0.0+107,8.0.0.1+13,9.1+18,9.2,master-g084aeec0a4,master-g0aced2eed8+6,master-g15627eb03c,master-g28afc54ef9,master-g3391ba5ea0,master-g3d0fb8ae5f,master-g4432ae2e89+36,master-g5c3c32f3ec+17,master-g60f1e072bb+1,master-g6a3ac32d1b,master-g76a88a4307+1,master-g7bce1f4e06+57,master-g8ff4092549+31,master-g98e65bf68e,master-ga6b77976b1+53,master-gae20e2b580+3,master-gb584cd3397+53,master-gc5448b162b+1,master-gc54cf9771d,master-gc69578ece6+1,master-gcbf758c456+22,master-gcec1da163f+63,master-gcf15f11bcc,master-gd167108223,master-gf44c96c709
LSSTDataManagementBasePackage
SliceThread.py
Go to the documentation of this file.
1 #
2 # LSST Data Management System
3 # Copyright 2008, 2009, 2010 LSST Corporation.
4 #
5 # This product includes software developed by the
6 # LSST Project (http://www.lsst.org/).
7 #
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the LSST License Statement and
19 # the GNU General Public License along with this program. If not,
20 # see <http://www.lsstcorp.org/LegalNotices/>.
21 #
22 
23 
24 import thread
25 import threading
26 import os, sys, re, traceback
27 from threading import Thread
28 from threading import Event as PyEvent
29 from lsst.pex.harness.Slice import Slice
30 
31 class SliceThread(threading.Thread):
32 
33  def __init__ (self, rank, name, pipelinePolicyName, runId, logthresh, usize, eventa, eventb, logdir, workerid):
34  Thread.__init__(self)
35  self.rank = rank
36  self.name = name
37  self.pipelinePolicyName = pipelinePolicyName
38  self._runId = runId
39  self.logthresh = logthresh
40  self.eventa = eventa
41  self.eventb = eventb
42  self.universeSize = usize
43  self.logdir = logdir
44  self.workerId = workerid
45  self.pid = os.getpid()
46 
47  def getPid (self):
48  return self.pid
49 
50  def stop (self):
51  self.pySlice.stop()
52 
53  def exit (self):
54  # thread.exit()
55  print "RAISE SYSTEM EXIT"
56  # raise SystemExit()
57  self.raise_exc(SystemExit)
58 
59  def run(self):
60 
61  if self.name is None or self.name == "None":
62  self.name = os.path.splitext(os.path.basename(self.pipelinePolicyName))[0]
63 
64  self.pySlice = Slice(self._runId, self.pipelinePolicyName, self.name, self.rank, self.workerId)
65  if isinstance(self.logthresh, int):
66  self.pySlice.setLogThreshold(self.logthresh)
67 
68  self.pySlice.setLoopEventA(self.eventa)
69  self.pySlice.setLoopEventB(self.eventb)
70  self.pySlice.setUniverseSize(self.universeSize)
71  self.pySlice.setLogDir(self.logdir)
72 
73  self.pySlice.initializeLogger()
74 
75  self.pySlice.configureSlice()
76 
77  self.pySlice.initializeQueues()
78 
79  self.pySlice.initializeStages()
80 
81  self.pySlice.startStagesLoop()
82 
83  self.pySlice.shutdown()
84 
85 
86 SliceThread.lifeline = re.compile(r"(\d) received")