Changeset b8c3505


Ignore:
Timestamp:
Jan 12, 2012, 2:35:57 AM (12 years ago)
Author:
Jessica B. Hamrick <jhamrick@…>
Branches:
no-cups
Children:
c94fa32
Parents:
adf8cf0
git-author:
Jessica B. Hamrick <jhamrick@…> (01/12/12 02:35:57)
git-committer:
Jessica B. Hamrick <jhamrick@…> (01/12/12 02:35:57)
Message:

Better threading with job.py and player.py

Location:
server/lib/gutenbach/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • server/lib/gutenbach/server/job.py

    radf8cf0 rb8c3505  
    323323
    324324    def cancel(self):
    325         """Non-blocking cancel. The job must not have been previously
     325        """Blocking cancel. The job must not have been previously
    326326        aborted or completed (though this method will succeed if it
    327327        was previously cancelled).  This should be used to stop the
     
    335335        """
    336336       
    337         def _cancelled():
    338             logger.info("cancelled job %s" % str(self))
    339             self._why_done = "cancelled"
    340 
    341337        if self.is_playing:
    342             self.player.callback = _cancelled
     338            self.player._callback = None
    343339            self.player.mplayer_stop()
     340
    344341        elif self.is_done and not self._why_done == "cancelled":
    345342            raise errors.InvalidJobStateException(self.state)
    346         else:
    347             _cancelled()
     343
     344        logger.info("cancelled job %s" % str(self))
     345        self._why_done = "cancelled"
    348346
    349347    def abort(self):
    350         """Non-blocking abort. The job must not have been previously
     348        """Blocking abort. The job must not have been previously
    351349        cancelled or completed (though this method will succeed if it
    352350        was previously aborted).  This should be used to stop the job
     
    360358        """
    361359
    362         def _aborted():
    363             logger.info("aborted job %s" % str(self))
    364             self._why_done = "aborted"
    365 
    366360        if self.is_playing:
    367             self.player.callback = _aborted
     361            self.player._callback = None
    368362            self.player.mplayer_stop()
     363
    369364        elif self.is_done and not self._why_done == "aborted":
    370365            raise errors.InvalidJobStateException(self.state)
    371         else:
    372             _aborted()
     366
     367        logger.info("aborted job %s" % str(self))
     368        self._why_done = "aborted"
    373369
    374370    def restart(self):
  • server/lib/gutenbach/server/player.py

    radf8cf0 rb8c3505  
    6161            raise ValueError, "file handler is None"
    6262       
    63         self.mplayer_play()
    64         self._done = True
     63        logger.info("playing file '%s'" % self.fh.name)
     64
    6565        with self.lock:
    66             if self.callback:
    67                 self.callback()
    68 
    69     def mplayer_play(self):
    70         if not self.isAlive():
    71             return
    72        
    73         logger.info("playing file '%s'" % self.fh.name)
    74         self._paused = False
     66            self._paused = False
     67            self._done = False
    7568
    7669        if self._dryrun:
     
    8174                while self.is_paused:
    8275                    time.sleep(0.01)
    83             return
     76
     77        else:
     78            # open mplayer
     79            with self.lock:
     80                self.player = subprocess.Popen(
     81                    "/usr/bin/mplayer -really-quiet -slave %s" % self.fh.name,
     82                    shell=True,
     83                    stdin=subprocess.PIPE,
     84                    stderr=subprocess.PIPE,
     85                    stdout=subprocess.PIPE)
     86
     87            # wait for mplayer to finish
     88            while True:
     89                with self.lock:
     90                    playing = self.is_playing
     91                if not playing:
     92                    break
     93                time.sleep(0.1)
     94
     95            logger.info("mplayer finished with code %d" % self.player.returncode)
    8496       
    85         # open mplayer
     97            # get output from mplayer and log it
     98            with self.lock:
     99                stderr = self.player.stderr.read()
     100                stdout = self.player.stdout.read()
     101           
     102            if stderr.strip() != "":
     103                logger.error(stderr)
     104            if stdout.strip() != "":
     105                logger.debug(stdout)
     106
    86107        with self.lock:
    87             self.player = subprocess.Popen(
    88                 "/usr/bin/mplayer -really-quiet -slave %s" % self.fh.name,
    89                 shell=True,
    90                 stdin=subprocess.PIPE,
    91                 stderr=subprocess.PIPE,
    92                 stdout=subprocess.PIPE)
    93 
    94         # wait for mplayer to finish
    95         while True:
    96             with self.lock:
    97                 playing = self.is_playing
    98             if not playing:
    99                 break
    100             time.sleep(0.1)
    101 
    102         logger.info("mplayer finished with code %d" % self.player.returncode)
    103        
    104         # get output from mplayer and log it
    105         with self.lock:
    106             stderr = self.player.stderr.read()
    107             stdout = self.player.stdout.read()
    108            
    109         if stderr.strip() != "":
    110             logger.error(stderr)
    111         if stdout.strip() != "":
    112             logger.debug(stdout)
     108            if self.callback:
     109                self.callback()
     110            self._done = True
    113111
    114112    def mplayer_pause(self):
     
    133131            else:
    134132                logger.warning("trying to stop non-playing job")
    135         time.sleep(self._lag)
     133        self.join()
Note: See TracChangeset for help on using the changeset viewer.