Esempio n. 1
0
    def check_parallel_module_init(self):
        if imp.lock_held():
            # This triggers on, e.g., from test import autotest.
            raise unittest.SkipTest("can't run when import lock is held")

        done = threading.Event()
        for N in (20, 50) * 3:
            if verbose:
                print("Trying", N, "threads ...", end=' ')
            # Make sure that random and modulefinder get reimported freshly
            for modname in ['random', 'modulefinder']:
                try:
                    del sys.modules[modname]
                except KeyError:
                    pass
            errors = []
            done_tasks = []
            done.clear()
            t0 = time.monotonic()
            with start_threads(threading.Thread(target=task,
                                                args=(N, done, done_tasks, errors,))
                               for i in range(N)):
                pass
            completed = done.wait(10 * 60)
            dt = time.monotonic() - t0
            if verbose:
                print("%.1f ms" % (dt*1e3), flush=True, end=" ")
            dbg_info = 'done: %s/%s' % (len(done_tasks), N)
            self.assertFalse(errors, dbg_info)
            self.assertTrue(completed, dbg_info)
            if verbose:
                print("OK.")
Esempio n. 2
0
    def check_parallel_module_init(self, mock_os):
        if imp.lock_held():
            # This triggers on, e.g., from test import autotest.
            raise unittest.SkipTest("can't run when import lock is held")

        done = threading.Event()
        for N in (20, 50) * 3:
            if verbose:
                print("Trying", N, "threads ...", end=' ')
            # Make sure that random and modulefinder get reimported freshly
            for modname in ['random', 'modulefinder']:
                try:
                    del sys.modules[modname]
                except KeyError:
                    pass
            errors = []
            done_tasks = []
            done.clear()
            t0 = time.monotonic()
            with start_threads(threading.Thread(target=task,
                                                args=(N, done, done_tasks, errors,))
                               for i in range(N)):
                pass
            completed = done.wait(10 * 60)
            dt = time.monotonic() - t0
            if verbose:
                print("%.1f ms" % (dt*1e3), flush=True, end=" ")
            dbg_info = 'done: %s/%s' % (len(done_tasks), N)
            self.assertFalse(errors, dbg_info)
            self.assertTrue(completed, dbg_info)
            if verbose:
                print("OK.")
Esempio n. 3
0
def execute(meth, *args, **kwargs):
    """
    Execute *meth* in a Python thread, blocking the current coroutine/
    greenthread until the method completes.

    The primary use case for this is to wrap an object or module that is not
    amenable to monkeypatching or any of the other tricks that Eventlet uses
    to achieve cooperative yielding.  With tpool, you can force such objects to
    cooperate with green threads by sticking them in native threads, at the cost
    of some overhead.
    """
    setup()
    # if already in tpool, don't recurse into the tpool
    # also, call functions directly if we're inside an import lock, because
    # if meth does any importing (sadly common), it will hang
    my_thread = threading.currentThread()
    if my_thread in _threads or imp.lock_held() or _nthreads == 0:
        return meth(*args, **kwargs)

    e = event.Event()
    _reqq.put((e, meth, args, kwargs))

    rv = e.wait()
    if isinstance(rv, tuple) \
            and len(rv) == 3 \
            and isinstance(rv[1], EXC_CLASSES):
        (c, e, tb) = rv
        if not QUIET:
            traceback.print_exception(c, e, tb)
            traceback.print_stack()
        six.reraise(c, e, tb)
    return rv
Esempio n. 4
0
    def check_parallel_module_init(self):
        if imp.lock_held():
            # This triggers on, e.g., from test import autotest.
            raise unittest.SkipTest("can't run when import lock is held")

        done = threading.Event()
        for N in (20, 50) * 3:
            if verbose:
                print("Trying", N, "threads ...", end=' ')
            # Make sure that random and modulefinder get reimported freshly
            for modname in ['random', 'modulefinder']:
                try:
                    del sys.modules[modname]
                except KeyError:
                    pass
            errors = []
            done_tasks = []
            done.clear()
            for i in range(N):
                t = threading.Thread(target=task,
                                     args=(N, done, done_tasks, errors,))
                t.start()
            self.assertTrue(done.wait(60))
            self.assertFalse(errors)
            if verbose:
                print("OK.")
Esempio n. 5
0
    def check_parallel_module_init(self):
        if imp.lock_held():
            # This triggers on, e.g., from test import autotest.
            raise unittest.SkipTest("can't run when import lock is held")

        done = threading.Event()
        for N in (20, 50) * 3:
            if verbose:
                print("Trying", N, "threads ...", end=' ')
            # Make sure that random and modulefinder get reimported freshly
            for modname in ['random', 'modulefinder']:
                try:
                    del sys.modules[modname]
                except KeyError:
                    pass
            errors = []
            done_tasks = []
            done.clear()
            for i in range(N):
                t = threading.Thread(target=task,
                                     args=(
                                         N,
                                         done,
                                         done_tasks,
                                         errors,
                                     ))
                t.start()
            self.assertTrue(done.wait(60))
            self.assertFalse(errors)
            if verbose:
                print("OK.")
 def check_parallel_module_init(self):
     if imp.lock_held():
         raise unittest.SkipTest("can't run when import lock is held")
     done = threading.Event()
     for N in ((20, 50) * 3):
         if verbose:
             print('Trying', N, 'threads ...', end=' ')
         for modname in ['random', 'modulefinder']:
             try:
                 del sys.modules[modname]
             except KeyError:
                 pass
         errors = []
         done_tasks = []
         done.clear()
         t0 = time.monotonic()
         with start_threads(
                 threading.Thread(target=task,
                                  args=(N, done, done_tasks, errors))
                 for i in range(N)):
             pass
         completed = done.wait(10 * 60)
         dt = time.monotonic() - t0
         if verbose:
             print('%.1f ms' % (dt * 1000.0), flush=True, end=' ')
         dbg_info = 'done: %s/%s' % (len(done_tasks), N)
         self.assertFalse(errors, dbg_info)
         self.assertTrue(completed, dbg_info)
         if verbose:
             print('OK.')
 def find_spec(self, name, path=None, target=None):
     assert imp.lock_held()
     with self.lock:
         self.numcalls += 1
     x = self.x
     time.sleep(0.01)
     self.x = x + 1
Esempio n. 8
0
 def find_spec(self, name, path=None, target=None):
     # Simulate some thread-unsafe behaviour. If calls to find_spec()
     # are properly serialized, `x` will end up the same as `numcalls`.
     # Otherwise not.
     assert imp.lock_held()
     with self.lock:
         self.numcalls += 1
     x = self.x
     time.sleep(0.01)
     self.x = x + 1
Esempio n. 9
0
 def find_spec(self, name, path=None, target=None):
     # Simulate some thread-unsafe behaviour. If calls to find_spec()
     # are properly serialized, `x` will end up the same as `numcalls`.
     # Otherwise not.
     assert imp.lock_held()
     with self.lock:
         self.numcalls += 1
     x = self.x
     time.sleep(0.01)
     self.x = x + 1
Esempio n. 10
0
def test_main():
    if imp.lock_held():
        # If the import lock is held, the threads will hang
        raise unittest.SkipTest("can't run when import lock is held")

    test.support.run_unittest(SocketServerTest)
Esempio n. 11
0
def test_main():
    if imp.lock_held():
        # If the import lock is held, the threads will hang
        raise unittest.SkipTest("can't run when import lock is held")

    test.support.run_unittest(SocketServerTest)
Esempio n. 12
0
 def lock_held(self):
     _imp.lock_held()