add set_event_loop

pull/195/head
Ciro Spaciari 2024-07-13 13:32:46 -07:00 zatwierdzone przez GitHub
rodzic 70199e8d7d
commit 0a3b3fa32f
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 29 dodań i 0 usunięć

Wyświetl plik

@ -111,6 +111,35 @@ class Loop:
def ensure_future(self, task):
return asyncio.ensure_future(task, loop=self.loop)
def set_event_loop(self, loop):
needs_start = False
if self.loop.is_running():
self.stop()
self.loop = loop
if self.exception_handler is not None:
self.loop.set_exception_handler(
lambda loop, context: self.exception_handler(loop, context, None)
)
if is_pypy: # PyPy async Optimizations
# TODO: check if any framework breaks without current_task(loop) support
# custom task factory for other tasks
def pypy_task_factory(loop, coro, context=None):
return create_task(loop, coro, context=context)
self.loop.set_task_factory(pypy_task_factory)
else:
# TODO: check if any framework breaks without current_task(loop) support
# custom task factory for other tasks
def cpython_task_factory(loop, coro, context=None):
return create_task(loop, coro, context=context)
self.loop.set_task_factory(cpython_task_factory)
if needs_start:
self.run()
def create_background_task(self, bg_task):
def next_tick():
self.ensure_future(bg_task())