403Webshell
Server IP : 123.56.80.60  /  Your IP : 216.73.216.78
Web Server : Apache/2.4.54 (Win32) OpenSSL/1.1.1s PHP/7.4.33 mod_fcgid/2.3.10-dev
System : Windows NT iZhx3sob14hnz7Z 10.0 build 14393 (Windows Server 2016) i586
User : SYSTEM ( 0)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Program Files/python/Lib/site-packages/gevent/tests/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Program Files/python/Lib/site-packages/gevent/tests/test__threading.py
"""
Tests specifically for the monkey-patched threading module.
"""
from gevent import monkey; monkey.patch_all() # pragma: testrunner-no-monkey-combine
import gevent.hub

# check that the locks initialized by 'threading' did not init the hub
assert gevent.hub._get_hub() is None, 'monkey.patch_all() should not init hub'

import gevent
import gevent.testing as greentest
import threading


def helper():
    threading.currentThread()
    gevent.sleep(0.2)


class TestCleanup(greentest.TestCase):

    def _do_test(self, spawn):
        before = len(threading._active)
        g = spawn(helper)
        gevent.sleep(0.1)
        self.assertEqual(len(threading._active), before + 1)
        try:
            g.join()
        except AttributeError:
            while not g.dead:
                gevent.sleep()
            # Raw greenlet has no join(), uses a weakref to cleanup.
            # so the greenlet has to die. On CPython, it's enough to
            # simply delete our reference.
            del g
            # On PyPy, it might take a GC, but for some reason, even
            # running several GC's doesn't clean it up under 5.6.0.
            # So we skip the test.
            #import gc
            #gc.collect()

        self.assertEqual(len(threading._active), before)


    def test_cleanup_gevent(self):
        self._do_test(gevent.spawn)

    @greentest.skipOnPyPy("weakref is not cleaned up in a timely fashion")
    def test_cleanup_raw(self):
        self._do_test(gevent.spawn_raw)


class TestLockThread(greentest.TestCase):

    def _spawn(self, func):
        t = threading.Thread(target=func)
        t.start()
        return t

    def test_spin_lock_switches(self):
        # https://github.com/gevent/gevent/issues/1464
        lock = threading.Lock()
        lock.acquire()
        spawned = []

        def background():
            spawned.append(True)
            while 1:
                # blocking= in Py3, wait (no default, no name) in Py2
                if lock.acquire(False):
                    break

        thread = threading.Thread(target=background)
        # If lock.acquire(False) doesn't yield when it fails,
        # then this never returns.
        thread.start()
        # Verify it tried to run
        self.assertEqual(spawned, [True])
        # We can attempt to join it, which won't work.
        thread.join(0)
        # We can release the lock and then it will acquire.
        lock.release()
        thread.join()


class TestLockGreenlet(TestLockThread):

    def _spawn(self, func):
        return gevent.spawn(func)

if __name__ == '__main__':
    greentest.main()

Youez - 2016 - github.com/yon3zu
LinuXploit