aio组件的容器。

os-aio-pod的Python项目详细描述


操作系统aio pod

Build StatuscodecovPyPI - Python VersionPyPI

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

有一些额外的包可以安装更多的功能。

subpackageinstall commandenables
uvloop^{}enable uvloop
uvicorn^{}enable uvicorn http server adapter
aiohttp^{}enable aiohttp http server adapter
aiomonitor^{}enable aiomonitor adapter

用法

三个步骤:

  1. 写下您的联程
  2. 编写配置文件(python文件)
  3. 使用os-aio-pod
  4. 运行

原料药

自定义协同程序

实际上,有三种类型的协同程序代码供您选择:

  1. 正则协程,以下示例的hello对象。

    import asyncio
    
    async def hello_world(**kwargs):
        print('hello world!')
        await asyncio.sleep(1)
    
    hello = hello_world()
    
  2. 正则协程函数,上例的hello_world函数。可以在配置文件中设置关键字参数。

  3. 具有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来处理信号。

系统SIGINTSIGTERM被框架捕获,以便在分派到每个注册的回调之后处理程序关闭内容。

其他系统信号尚不受支持。

配置

配置文件是一个普通的python文件,所有大写的变量都将传递给框架,以后可以访问它。保留关键字:

  • BEANS:一个bean配置dict列表,每个bean配置的保留关键字是:corelabel,其他关键字参数将传递给您的函数

    core:您的协同程序的字符串路径

    label:可选,可用于跟踪bean

  • LOG_LEVEL:日志级别,默认值INFO

  • LOOP_TYPE:默认值是asyncio,在安装uvloop时可以是uvloop

  • DEBUG:启用调试模式,默认值False

  • STOP_WAIT_TIME:接收信号的等待时间(SIGINTSIGTERM)。一旦超时,所有未完成的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

许可证

麻省理工学院许可。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
从方法名创建java查询无效。正在尝试筛选可分页的   构造函数中的java异常消息   java为什么我在MAC OS X 10.11上看不到java_主路径?   java如何澄清用户的输入是否是二进制数?   java在ant脚本中将JVM参数传递给clover   从txt文件读取调查结果并输出每个调查答案频率的Java程序   java进程引擎。getDefaultProcessEngine()空点异常   java SpringSecurity:忽略服务器名的别名并强制重新登录   java pythonsocket[Errno 57]socket未连接,尽管响应良好   使用Commons或Guava将文本文件转换为Java列表<String>   在hadoop中使用相同的输入文件为两个不同的任务创建两个输出文件   java方法toArray()不处理列表   我的应用程序中的java试图在Web服务器中更新数据库时获取通知。如何做到这一点?   java无法选择ListView项   java如何将变量传递给扩展类的方法   java使用片段中的数据绑定和相关活动的不同包   java出现读入文件问题,并将其设置为变量   JavaJSF2。0@EJB注入@ViewScoped导致MyFaces成为CFNE   java如何创建spring0boot项目?