Minimalistic library that simplifies the adoption of async/await (asyncio) programming style in a multithreaded application.
Project description
magic_foundation
Minimalistic library that simplifies the adoption of async/await (asyncio) programming style in a multithreaded application.
Define 2 services and run in the same runloop (single thread)
import logging
from magic_foundation import Service, ServiceStatus, ServiceContext, Main
class TestService(Service):
def __init__(self, name:str):
self.name = name
async def initialize(self, ctx:ServiceContext):
log.info(f"[{self.name}] initialize")
async def run(self, ctx:ServiceContext):
index = 0
while self.status is ServiceStatus.running:
log.info(f"[{self.name}] run {index}")
index += 1
await asyncio.sleep(1.0)
async def terminate(self, ctx:ServiceContext):
log.info(f"[{self.name}] terminate")
if __name__ == "__main__":
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
logging.getLogger("magic_foundation").setLevel(logging.DEBUG)
main = Main.instance()
main.service_pools = {
'main': [
TestService(name="Service_1"),
TestService(name="Service_2")
],
}
main.run()
If you want running the 2 services in different threads just define the service_pools as following:
...
main = Main.instance()
main.service_pools = {
'th1': [
TestService(name="Service_1")
],
'th2': [
TestService(name="Service_2")
],
}
main.run()
Communication
The communication between Services mimics the publish/subscribe paradigm
Subscribe
async def coro(data):
log.info(f"[{self.name}] coro data:{data}")
await ctx.subscribe(queue_name="q://my_queue", handler=coro)
Pubblish
data = {
"a": "A",
"b": 1234
}
await ctx.publish(queue_name="q://my_queue", data=data)
It is possible to subscribe to the same queue from different services and each service will receive the message
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file magic_foundation-0.1.2.tar.gz
.
File metadata
- Download URL: magic_foundation-0.1.2.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56ed915d7ef7638fd4fb12a4f65f707c6b65a889766d83c6dfc79f5c0d0ca94c |
|
MD5 | 0f7d41217c49ff6e99a04d92ed5abe52 |
|
BLAKE2b-256 | 5c645de7a373a619fd380fd722fca0eb829d39710730fee478cc7227f2f95291 |
File details
Details for the file magic_foundation-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: magic_foundation-0.1.2-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 65f57881c5d594c4874259c44cf0dd8e0c5216fde21a5524ddac194f64fb0e85 |
|
MD5 | f959e3803020e7f46893a178fc56153a |
|
BLAKE2b-256 | 75906d0b5d3d3c1eabe1895228192afc709420f306879318876a598b47758903 |