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