aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/greenlet/tests/fail_switch_three_greenlets.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/greenlet/tests/fail_switch_three_greenlets.py')
-rw-r--r--.venv/lib/python3.12/site-packages/greenlet/tests/fail_switch_three_greenlets.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/greenlet/tests/fail_switch_three_greenlets.py b/.venv/lib/python3.12/site-packages/greenlet/tests/fail_switch_three_greenlets.py
new file mode 100644
index 00000000..e151b19a
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/greenlet/tests/fail_switch_three_greenlets.py
@@ -0,0 +1,44 @@
+"""
+Uses a trace function to switch greenlets at unexpected times.
+
+In the trace function, we switch from the current greenlet to another
+greenlet, which switches
+"""
+import greenlet
+
+g1 = None
+g2 = None
+
+switch_to_g2 = False
+
+def tracefunc(*args):
+ print('TRACE', *args)
+ global switch_to_g2
+ if switch_to_g2:
+ switch_to_g2 = False
+ g2.switch()
+ print('\tLEAVE TRACE', *args)
+
+def g1_run():
+ print('In g1_run')
+ global switch_to_g2
+ switch_to_g2 = True
+ from_parent = greenlet.getcurrent().parent.switch()
+ print('Return to g1_run')
+ print('From parent', from_parent)
+
+def g2_run():
+ #g1.switch()
+ greenlet.getcurrent().parent.switch()
+
+greenlet.settrace(tracefunc)
+
+g1 = greenlet.greenlet(g1_run)
+g2 = greenlet.greenlet(g2_run)
+
+# This switch didn't actually finish!
+# And if it did, it would raise TypeError
+# because g1_run() doesn't take any arguments.
+g1.switch(1)
+print('Back in main')
+g1.switch(2)