Issue #10220: Add inspect.getgeneratorstate(). Initial patch by Rodolpho Eckhardt
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 241cd08..e410dba 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -1128,3 +1128,23 @@
if default is not _sentinel:
return default
raise AttributeError(attr)
+
+
+GEN_CREATED, GEN_RUNNING, GEN_SUSPENDED, GEN_CLOSED = range(4)
+
+def getgeneratorstate(generator):
+ """Get current state of a generator-iterator.
+
+ Possible states are:
+ GEN_CREATED: Waiting to start execution.
+ GEN_RUNNING: Currently being executed by the interpreter.
+ GEN_SUSPENDED: Currently suspended at a yield expression.
+ GEN_CLOSED: Execution has completed.
+ """
+ if generator.gi_running:
+ return GEN_RUNNING
+ if generator.gi_frame is None:
+ return GEN_CLOSED
+ if generator.gi_frame.f_lasti == -1:
+ return GEN_CREATED
+ return GEN_SUSPENDED