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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.