Beispiel #1
0
def Manager():
  """Create a background process for managing interprocess communication.

  This manager wraps multiprocessing.Manager() and ensures that any sockets
  created during initialization are created in '/tmp' rather than in a custom
  temp directory. This is needed because TMPDIR might be really long, and
  named sockets are limited to 108 characters.

  Usage:
    with Manager() as manager:
      queue = manager.Queue()
      ...

  Returns:
    The return value of multiprocessing.Manager()
  """
  old_tempdir_value, old_tempdir_env = osutils.SetGlobalTempDir('/tmp')
  try:
    m = HackTimeoutSyncManager()
    # SyncManager doesn't handle KeyboardInterrupt exceptions well; pipes get
    # broken and E_NOENT or E_PIPE errors are thrown from various places. We
    # can just ignore SIGINT in the SyncManager and things will close properly
    # when the enclosing with-statement exits.
    m.start(IgnoreSigint)
    return m
  finally:
    osutils.SetGlobalTempDir(old_tempdir_value, old_tempdir_env)
Beispiel #2
0
def Manager():
    """Create a background process for managing interprocess communication.

  This manager wraps multiprocessing.Manager() and ensures that any sockets
  created during initialization are created under the /tmp tree rather than in a
  custom temp directory. This is needed because TMPDIR might be really long, and
  named sockets are limited to 108 characters.

  Examples:
    with Manager() as manager:
      queue = manager.Queue()
      ...

  Returns:
    The return value of multiprocessing.Manager()
  """
    # Use a short directory in /tmp. Do not use /tmp directly to keep these
    # temperary files together and because certain environments do not like too
    # many top-level paths in /tmp (see crbug.com/945523).
    # Make it mode 1777 to mirror /tmp, so that we don't have failures when root
    # calls parallel first, and some other user calls it later.
    tmp_dir = '/tmp/chromite.parallel.%d' % os.geteuid()
    osutils.SafeMakedirs(tmp_dir, mode=0o1777)
    old_tempdir_value, old_tempdir_env = osutils.SetGlobalTempDir(tmp_dir)
    try:
        m = HackTimeoutSyncManager()
        # SyncManager doesn't handle KeyboardInterrupt exceptions well; pipes get
        # broken and E_NOENT or E_PIPE errors are thrown from various places. We
        # can just ignore SIGINT in the SyncManager and things will close properly
        # when the enclosing with-statement exits.
        m.start(IgnoreSigintAndSigterm)
        return m
    finally:
        osutils.SetGlobalTempDir(old_tempdir_value, old_tempdir_env)
 def testLongTempDirectory(self):
   """Test that we can handle a long temporary directory."""
   with osutils.TempDir() as tempdir:
     new_tempdir = os.path.join(tempdir, 'xxx/' * 100)
     osutils.SafeMakedirs(new_tempdir)
     old_tempdir, old_tempdir_env = osutils.SetGlobalTempDir(new_tempdir)
     try:
       self.testParallelHelloWorld()
     finally:
       osutils.SetGlobalTempDir(old_tempdir, old_tempdir_env)
Beispiel #4
0
def Manager():
    """Create a background process for managing interprocess communication.

    This manager wraps multiprocessing.Manager() and ensures that any sockets
    created during initialization are created in '/tmp' rather than in a custom
    temp directory. This is needed because TMPDIR might be really long, and
    named sockets are limited to 108 characters.

    Usage:
        with Manager() as manager:
            queue = manager.Queue()
            ...

    Returns:
        The return value of multiprocessing.Manager()
    """
    old_tempdir_value, old_tempdir_env = osutils.SetGlobalTempDir('/tmp')
    try:
        return multiprocessing.Manager()
    finally:
        osutils.SetGlobalTempDir(old_tempdir_value, old_tempdir_env)