website/content/blog/asynccallbacks.md

25 lines
843 B
Markdown
Raw Normal View History

2020-07-11 20:46:33 -04:00
---
title: "Quick Python: Async Callbacks"
date: 2020-07-11T20:23:29-04:00
draft: false
tags: ["python"]
---
I've written a post on using [callbacks in Python](https://brandonrozek.com/blog/pysubscribepattern/). Though to add callbacks to `asyncio` functions, you'll have to interact with the loop object directly. Replace the emit function in the previous post with the following:
```python
class Application:
# ...
def emit(self, message):
for callback in self.callbacks:
2020-07-11 20:47:46 -04:00
if asyncio.iscoroutine(callback):
loop = asyncio.get_running_loop()
loop.call_soon(
functools.partial(
2020-07-11 20:46:33 -04:00
asyncio.ensure_future,
2020-07-11 20:48:52 -04:00
callback(message)
2020-07-11 20:47:46 -04:00
)
)
else:
2020-07-11 20:48:52 -04:00
callback(message)
2020-07-11 20:46:33 -04:00
```