website/content/blog/asynccallbacks.md

25 lines
843 B
Markdown
Raw Normal View History

2020-07-12 00:46:33 +00:00
---
title: "Quick Python: Async Callbacks"
date: 2020-07-11T20:23:29-04:00
draft: false
2022-01-02 19:24:29 +00:00
tags: ["Python"]
2020-07-12 00:46:33 +00:00
---
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-12 00:47:46 +00:00
if asyncio.iscoroutine(callback):
loop = asyncio.get_running_loop()
loop.call_soon(
functools.partial(
2020-07-12 00:46:33 +00:00
asyncio.ensure_future,
2020-07-12 00:48:52 +00:00
callback(message)
2020-07-12 00:47:46 +00:00
)
)
else:
2020-07-12 00:48:52 +00:00
callback(message)
2020-07-12 00:46:33 +00:00
```