aio组件的容器。
os-aio-pod的Python项目详细描述
操作系统aio pod
aio组件的容器。
这个项目是一个将多个aio组件组合成一个组件的框架。例如,可以使用http服务器轻松扩展tcp服务器,以提供http api。用法很简单,编写常规的协程和配置文件,从命令行工具开始,框架将负责工作循环。
每个协程都是一个魔豆,这个框架是一个魔豆。
概念
自定义协同程序打包为asyncio.Task
,我们称之为:bean。由于python异步,所有bean都可以一起工作。名为pod的运行程序维护bean和整个工作循环生命周期。
每个bean都有一个唯一的id。label还可以用于标识一个或多个bean。
您可以通过使用id或label的上下文对象来访问其他bean。
可以向注册回调函数的每个bean发送信号。
安装
pip install os-aio-pod
有一些额外的包可以安装更多的功能。
subpackage | install command | enables |
---|---|---|
uvloop | ^{ | enable uvloop |
uvicorn | ^{ | enable uvicorn http server adapter |
aiohttp | ^{ | enable aiohttp http server adapter |
aiomonitor | ^{ | enable aiomonitor adapter |
用法
三个步骤:
- 写下您的联程
- 编写配置文件(python文件)
- 使用
os-aio-pod
运行
原料药
自定义协同程序
实际上,有三种类型的协同程序代码供您选择:
正则协程,以下示例的
hello
对象。import asyncio async def hello_world(**kwargs): print('hello world!') await asyncio.sleep(1) hello = hello_world()
正则协程函数,上例的
hello_world
函数。可以在配置文件中设置关键字参数。具有
async def __call__(self)
方法并将上下文作为初始参数的类:class HelloWorld(object): def __init__(self, context): self.context = context async def __call__(self, **kwargs): print('hello world!') await asyncio.sleep(1)
上下文
当使用类类型协程时,可以使用上下文与框架和其他bean通信。
信号
多亏了asyncio_dispatch,我们可以轻松地注册和发送信号。
通常,您应该只使用上下文api来处理信号。
系统SIGINT
,SIGTERM
被框架捕获,以便在分派到每个注册的回调之后处理程序关闭内容。
其他系统信号尚不受支持。
配置
配置文件是一个普通的python文件,所有大写的变量都将传递给框架,以后可以访问它。保留关键字:
BEANS
:一个bean配置dict列表,每个bean配置的保留关键字是:core
,label
,其他关键字参数将传递给您的函数core
:您的协同程序的字符串路径label
:可选,可用于跟踪beanLOG_LEVEL
:日志级别,默认值INFO
LOOP_TYPE
:默认值是asyncio
,在安装uvloop时可以是uvloop
。DEBUG
:启用调试模式,默认值False
STOP_WAIT_TIME
:接收信号的等待时间(SIGINT
,SIGTERM
)。一旦超时,所有未完成的bean都将被取消。默认值是None
,表示等待所有bean完成
示例:
config.py
BEANS = [
{
'core' : 'hello_world.HelloWorld',
'label': 'first-bean',
'key1' : 'value1',
}
]
LOG_LEVEL = 'debug'
LOOP_TYPE = 'asyncio'
DEBUG = False
STOP_WAIT_TIME = 10
命令行
os-aio-pod
命令可以用来启动整个框架,典型用法是:
$ os-aio-pod run -c config.py
可以通过传递命令行选项来设置保留的配置关键字(excludeBEANS
)。
$ os-aio-pod run --help
内置组件
有一些内置适配器可用于方便:
uvicorn,一个闪电般快速的asgi服务器
pip install uvicorn
BEANS = [ { 'core': 'os_aio_pod.contrib.uvicorn.UvicornAdapter', 'app' : 'your.app.object.path' } ]
名为
aio_pod_context
的上下文对象将附加到a p p对象aiohttp,一个著名的aio http服务器
pip install aiohttp
BEANS = [ { 'core': 'os_aio_pod.contrib.aiohttp.WebAdapter', 'app' : 'your.app.object.path' } ]
名为
aio_pod_context
的上下文对象将附加到a p p对象aiomonitor,为异步应用程序添加监视器和python repl功能
pip install aiomonitor
BEANS = [ { 'core': 'os_aio_pod.contrib.aiomonitor.AioMonitorAdapter', } ]
内置TCP服务器
事件驱动服务器可以从^{
}(默认服务器)。 如果配置了协议,则将使用低级网络协议接口,而不是服务器的on-connect方法。可以使用
访问服务器实例your_protocol.server
BEANS = [ { 'core': 'os_aio_pod.contrib.tcp_server.TCPServerAdapter', # 'protocol': 'your.asyncio.Protocol.path' # 'server': 'your.event.driven.server' } ]
单元测试
tox
许可证
麻省理工学院许可。