mirror of https://github.com/nocturn9x/giambio.git
Fixed the join mechanism and the schedule method
This commit is contained in:
parent
f63d7477ed
commit
3ad0d46cda
|
@ -42,8 +42,8 @@ async def main():
|
||||||
task = loop.spawn(countdown(8))
|
task = loop.spawn(countdown(8))
|
||||||
task1 = loop.schedule(count(8, 2), 2)
|
task1 = loop.schedule(count(8, 2), 2)
|
||||||
result = await task.join()
|
result = await task.join()
|
||||||
# result1 = await task1.join() # Joining a scheduled task does not reschedule the parent task
|
result1 = await task1.join() # Joining a scheduled task does not reschedule the parent task
|
||||||
print(result, result1)
|
print(f"countdown returned: {result}\ncount returned: {result1}")
|
||||||
print("All done")
|
print("All done")
|
||||||
|
|
||||||
loop.start(main)
|
loop.start(main)
|
||||||
|
|
|
@ -48,7 +48,7 @@ class EventLoop:
|
||||||
try:
|
try:
|
||||||
method, *args = self.running.run() # Sneaky method call, thanks to David Beazley for this ;)
|
method, *args = self.running.run() # Sneaky method call, thanks to David Beazley for this ;)
|
||||||
getattr(self, method)(*args)
|
getattr(self, method)(*args)
|
||||||
except StopIteration as e: # TODO: Fix this return mechanism, it looks like the return value of the child task gets "replaced" by None at some point
|
except StopIteration as e:
|
||||||
self.running.result = Result(e.args[0] if e.args else None, None) # Saves the return value
|
self.running.result = Result(e.args[0] if e.args else None, None) # Saves the return value
|
||||||
self.to_run.extend(self.joined.pop(self.running, ())) # Reschedules the parent task
|
self.to_run.extend(self.joined.pop(self.running, ())) # Reschedules the parent task
|
||||||
except Exception as has_raised:
|
except Exception as has_raised:
|
||||||
|
@ -58,7 +58,7 @@ class EventLoop:
|
||||||
else: # Let the exception propagate (I'm looking at you asyncIO ;))
|
else: # Let the exception propagate (I'm looking at you asyncIO ;))
|
||||||
raise
|
raise
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
self.running.coroutine.throw(KeyboardInterrupt)
|
self.running.throw(KeyboardInterrupt)
|
||||||
|
|
||||||
def spawn(self, coroutine: types.coroutine):
|
def spawn(self, coroutine: types.coroutine):
|
||||||
"""Schedules a task for execution, appending it to the call stack"""
|
"""Schedules a task for execution, appending it to the call stack"""
|
||||||
|
@ -161,10 +161,7 @@ class Task:
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.status = True
|
self.status = True
|
||||||
try:
|
return self.coroutine.send(None)
|
||||||
return self.coroutine.send(None)
|
|
||||||
except RuntimeError:
|
|
||||||
print(self.loop.to_run)
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"giambio.core.Task({self.coroutine}, {self.status}, {self.joined}, {self.result})"
|
return f"giambio.core.Task({self.coroutine}, {self.status}, {self.joined}, {self.result})"
|
||||||
|
|
Loading…
Reference in New Issue