PATH:
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
greenlet
/
tests
""" Testing initialstub throwing an already started exception. """ import greenlet a = None b = None c = None main = greenlet.getcurrent() # If we switch into a dead greenlet, # we go looking for its parents. # if a parent is not yet started, we start it. results = [] def a_run(*args): #results.append('A') results.append(('Begin A', args)) def c_run(): results.append('Begin C') b.switch('From C') results.append('C done') class A(greenlet.greenlet): pass class B(greenlet.greenlet): doing_it = False def __getattribute__(self, name): if name == 'run' and not self.doing_it: assert greenlet.getcurrent() is c self.doing_it = True results.append('Switch to b from B.__getattribute__ in ' + type(greenlet.getcurrent()).__name__) b.switch() results.append('B.__getattribute__ back from main in ' + type(greenlet.getcurrent()).__name__) if name == 'run': name = '_B_run' return object.__getattribute__(self, name) def _B_run(self, *arg): results.append(('Begin B', arg)) results.append('_B_run switching to main') main.switch('From B') class C(greenlet.greenlet): pass a = A(a_run) b = B(parent=a) c = C(c_run, b) # Start a child; while running, it will start B, # but starting B will ALSO start B. result = c.switch() results.append(('main from c', result)) # Switch back to C, which was in the middle of switching # already. This will throw the ``GreenletStartedWhileInPython`` # exception, which results in parent A getting started (B is finished) c.switch() results.append(('A dead?', a.dead, 'B dead?', b.dead, 'C dead?', c.dead)) # A and B should both be dead now. assert a.dead assert b.dead assert not c.dead result = c.switch() results.append(('main from c.2', result)) # Now C is dead assert c.dead print("RESULTS:", results)
[-] fail_clearing_run_switches.py
[edit]
[+]
__pycache__
[-] fail_switch_two_greenlets.py
[edit]
[-] fail_slp_switch.py
[edit]
[-] _test_extension.cpython-312-x86_64-linux-gnu.so
[edit]
[-] test_generator.py
[edit]
[-] test_extension_interface.py
[edit]
[-] test_greenlet.py
[edit]
[-] test_tracing.py
[edit]
[-] _test_extension_cpp.cpp
[edit]
[-] __init__.py
[edit]
[-] test_throw.py
[edit]
[-] test_version.py
[edit]
[-] test_greenlet_trash.py
[edit]
[-] test_gc.py
[edit]
[+]
..
[-] _test_extension.c
[edit]
[-] test_stack_saved.py
[edit]
[-] test_cpp.py
[edit]
[-] test_weakref.py
[edit]
[-] fail_switch_three_greenlets2.py
[edit]
[-] fail_initialstub_already_started.py
[edit]
[-] leakcheck.py
[edit]
[-] fail_cpp_exception.py
[edit]
[-] test_contextvars.py
[edit]
[-] _test_extension_cpp.cpython-312-x86_64-linux-gnu.so
[edit]
[-] test_leaks.py
[edit]
[-] test_generator_nested.py
[edit]
[-] fail_switch_three_greenlets.py
[edit]