Boilerplate for asyncio service
Project description
Boilerplate for asyncio service
This module provides boilerplate for microservices written in asyncio:
- Runner with task reference handler and graceful shutdown
- Configuration provider
- Logger with color support
import asyncio
from aiobp import runner
async def main():
try:
await asyncio.sleep(60)
except asyncio.CancelledError:
print('Saving data...')
runner(main())
More complex example
import asyncio
import aiohttp # just for example
import sys
from aiobp import create_task, on_shutdown, runner
from aiobp.config import InvalidConfigFile, sys_argv_or_filenames
from aiobp.config.conf import loader
from aiobp.logging import LoggingConfig, add_devel_log_level, log, setup_logging
class WorkerConfig:
"""Your microservice worker configuration"""
sleep: int = 5
class Config:
"""Put configurations together"""
worker: WorkerConfig
log: LoggingConfig
async def worker(config: WorkerConfig, client_session: aiohttp.ClientSession) -> int:
"""Perform service work"""
attempts = 0
try:
async with client_session.get('http://python.org') as resp:
assert resp.status == 200
log.debug('Page length %d', len(await resp.text()))
attempts += 1
await asyncio.sleep(config.sleep)
except asyncio.CancelledError:
log.info('Doing some shutdown work')
await client_session.post('http://localhost/service/attempts', data={'attempts': attempts})
return attempts
async def service(config: Config):
"""Your microservice"""
client_session = aiohttp.ClientSession()
on_shutdown(client_session.close, after_tasks_cancel=True)
create_task(worker(config.worker, client_session), 'PythonFetcher')
# you can do some monitoring, statistics collection, etc.
# or just let the method finish and the runner will wait for Ctrl+C or kill
def main():
"""Example microservice"""
add_devel_log_level()
try:
config_filename = sys_argv_or_filenames('service.local.conf', 'service.conf')
config = loader(Config, config_filename)
except InvalidConfigFile as error:
print(f'Invalid configuration: {error}')
sys.exit(1)
setup_logging(config.log)
log.info("Using config file: %s", config_filename)
runner(service(config))
if __name__ == '__main__':
main()
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
aiobp-0.3.2.tar.gz
(17.7 kB
view details)
Built Distribution
aiobp-0.3.2-py3-none-any.whl
(12.1 kB
view details)
File details
Details for the file aiobp-0.3.2.tar.gz
.
File metadata
- Download URL: aiobp-0.3.2.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.6 Linux/6.10.10-arch1-1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 04f45f55bc10cd1eb59c1c0e0f7aee0a99e26874c4414d357e8e7364ec5c7e75 |
|
MD5 | ca98eb36df06b6fe7bd3d92080484827 |
|
BLAKE2b-256 | 947aac72e4ab72269a60cc9971570d73e4583a759350b204f95cf47f677dd7ef |
File details
Details for the file aiobp-0.3.2-py3-none-any.whl
.
File metadata
- Download URL: aiobp-0.3.2-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.6 Linux/6.10.10-arch1-1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e369501473b3524321cbbf2a2404554ca91e5c74025407dfb5b9c05820078117 |
|
MD5 | fda0b0836f0890b6d4c5515a29b88f5d |
|
BLAKE2b-256 | 1c62b0ce3da20d1bc569d65faa19dd7063605408777e7067a848220c02fb4aba |