Skip to content

Commit 8b968d1

Browse files
Eugene Eeosaghul
authored andcommitted
Refactor Fiber parent finding into method
1 parent ae32b77 commit 8b968d1

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

fibers/_pyfibers.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@ def _run(c):
3636
cont = self._cont
3737
self._cont = None
3838
self._ended = True
39-
parent = self.parent
40-
while True:
41-
if parent is not None and parent._cont is not None and not parent._ended:
42-
break
43-
parent = parent.parent
44-
_continuation.permute(cont, parent._cont)
39+
_continuation.permute(
40+
cont,
41+
self._get_active_parent()._cont,
42+
)
4543

4644
self._func = _run
4745

@@ -52,6 +50,16 @@ def _run(c):
5250
raise error('parent cannot be on a different thread')
5351
self.parent = parent
5452

53+
def _get_active_parent(self):
54+
parent = self.parent
55+
while True:
56+
if (parent is not None
57+
and parent._cont is not None
58+
and not parent._ended):
59+
break
60+
parent = parent.parent
61+
return parent
62+
5563
@classmethod
5664
def current(cls):
5765
return current()
@@ -97,12 +105,7 @@ def throw(self, *args):
97105
if self._cont is None:
98106
# Fiber was not started yet, propagate to parent directly
99107
self._ended = True
100-
parent = self.parent
101-
while True:
102-
if parent is not None and parent._cont is not None and not parent._ended:
103-
break
104-
parent = parent.parent
105-
return parent.throw(*args)
108+
return self._get_active_parent().throw(*args)
106109

107110
try:
108111
return curr._cont.throw(*args, to=self._cont)

0 commit comments

Comments
 (0)