parameters: (fd)
docstring: Run semaphore tracker.
docstring_summary: Run semaphore tracker.
docstring_tokens: Run semaphore tracker .
function: def main(fd):
      '''Run semaphore tracker.'''
      # protect the process from ^C and "killall python" etc
      signal.signal(signal.SIGINT, signal.SIG_IGN)
      signal.signal(signal.SIGTERM, signal.SIG_IGN)
  
      for f in (sys.stdin, sys.stdout):
          try:
              f.close()
          except Exception:
              pass
  
      cache = set()
      try:
          # keep track of registered/unregistered semaphores
          with open(fd, 'rb') as f:
              for line in f:
                  try:
                      cmd, name = line.strip().split(b':')
                      if cmd == b'REGISTER':
                          cache.add(name)
                      elif cmd == b'UNREGISTER':
                          cache.remove(name)
                      else:
                          raise RuntimeError('unrecognized command %r' % cmd)
                  except Exception:
                      try:
                          sys.excepthook(*sys.exc_info())
                      except:
                          pass
      finally:
          # all processes have terminated; cleanup any remaining semaphores
          if cache:
              try:
                  warnings.warn('semaphore_tracker: There appear to be %d '
                                'leaked semaphores to clean up at shutdown' %
                                len(cache))
              except Exception:
                  pass
          for name in cache:
              # For some reason the process which created and registered this
              # semaphore has failed to unregister it. Presumably it has died.
              # We therefore unlink it.
              try:
                  name = name.decode('ascii')
                  try:
                      _multiprocessing.sem_unlink(name)
                  except Exception as e:
                      warnings.warn('semaphore_tracker: %r: %s' % (name, e))
              finally:
                  pass
function_tokens: def main ( fd ) : # protect the process from ^C and "killall python" etc signal . signal ( signal . SIGINT , signal . SIG_IGN ) signal . signal ( signal . SIGTERM , signal . SIG_IGN ) for f in ( sys . stdin , sys . stdout ) : try : f . close ( ) except Exception : pass cache = set ( ) try : # keep track of registered/unregistered semaphores with open ( fd , 'rb' ) as f : for line in f : try : cmd , name = line . strip ( ) . split ( b':' ) if cmd == b'REGISTER' : cache . add ( name ) elif cmd == b'UNREGISTER' : cache . remove ( name ) else : raise RuntimeError ( 'unrecognized command %r' % cmd ) except Exception : try : sys . excepthook ( * sys . exc_info ( ) ) except : pass finally : # all processes have terminated; cleanup any remaining semaphores if cache : try : warnings . warn ( 'semaphore_tracker: There appear to be %d ' 'leaked semaphores to clean up at shutdown' % len ( cache ) ) except Exception : pass for name in cache : # For some reason the process which created and registered this # semaphore has failed to unregister it. Presumably it has died. # We therefore unlink it. try : name = name . decode ( 'ascii' ) try : _multiprocessing . sem_unlink ( name ) except Exception as e : warnings . warn ( 'semaphore_tracker: %r: %s' % ( name , e ) ) finally : pass