pycopy的轻量级类异步库,围绕本机python协同路由构建。

pycopy-uasyncio的Python项目详细描述


uasycio是一个最小异步调度库,大致上 模仿了cpython的异步。uasyncio用于 Pycopy,一个轻量级的 最简单的python实现。

uasyncio不使用naive always迭代调度算法, 但是执行基于实时的调度,这允许它(和 因此整个系统)在无事可做的情况下睡觉(实际上 它的实现依赖于i/o调度算法 实际执行等待操作)。

异步的主要概念差异:

  • 避免定义未来的概念,尤其是包装协程 在未来,就像cpython asyncio一样。uasyncio直接与 协同程序(和回调)。
  • 提供的方法是更一致的协程。
  • uasyncio使用环绕毫秒时基(作为所有 pycopy端口。)
  • 不提供单个大包装,而是提供子包装的数量 (每个都可以单独安装)。

具体区别:

  • 对于毫秒调度,loop.call_later_ms()uasyncio.sleep_ms()已提供。
  • 由于没有单调时间,因此不提供loop.call_at()。 取而代之的是loop.call_at_(),它被认为是内部的 函数和具有稍微不同的签名。
  • call_*函数不返回由调度的句柄和回调 它们不能取消。如果需要取消,它们应该 接受对象作为参数,并应设置“取消”标志 在对象中,用于测试回调。
  • Future对象不可用。
  • ensure_future()Task()只执行调度操作 并返回本机协同程序,而不是未来/任务对象。
  • 其他一些功能尚未实现。
  • streamwriter方法是协同程序。在cpython asyncio中, streamwriter.write()是一个普通函数(可能会缓冲 无限制的数据量),uasyncio提供了coroutine streamwriter.awrite() 相反。此外,streamreader和streamwriter都有.aclose() 协同程序方法。

高级主题

术语:

  • 任务-顶级协同程序,在事件循环中使用其 创建任务()方法。(或者,作为uasyncio扩展,一个coutroutine 对象由另一个协程传递给“yield”语句,此 相当于create_task()调用)。运行不同的任务 以合作的方式同时进行。每个任务也可以调用 递归地另一个协程(在这种情况下调用协程 将“等待”(字面意思)完成所谓的联程。更多 在形式上,任务是在顶层路由的协同调用树 传递给create_tast(),并由其标识的协程。

任务间资源共享注意事项

就像在抢占线程之间共享资源一样,共享资源 uasyncio之间的协作任务有其特殊性和局限性。 实际上,由于I/O调度的实现,还有 要考虑的特点。但是让我们从陈述资源开始 任务/线程之间的共享通常是一个错误。例如,如果两者都是 任务写入资源时,它们可能会穿插在 不可预知的方式。阅读更成问题:不同的任务 可能得到部分输入,或者一个可以得到全部,而另一个则完全没有。if任务 实现一些协议,即I/O对话框,这将导致不正确的 行为和/或死锁。因此,规则是:不要共享相同的I/O 对象,特别是streamreader和streamwriter对象 不同的任务。(当然,它们可以传递给 当前任务)。

上面的一个极端情况是试图使用相同的reader部分 一个任务中的streamreader/streamwriter部分,而另一个任务中的writer部分。 这可能只是推测性使用,也不支持: streamreader和streamwriter表示相同的半双工部分 I/O流,两者都必须在一个任务。如果你需要什么 像上面一样,您需要创建不同的streamreader/writer对 (可能来自不同的底层I/O对象)。

虽然上面给出了streamreader/streamwriter示例,但它适用于 其他I/O对象。例如,uasyncio.udp套接字 不应将相同内容传递给两个不同的任务。如果你需要这个,2 应使用不同的插座。

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

推荐PyPI第三方库


热门话题
java使用单独的类从Get和Set方法获取值   将表从MySql导入配置单元时发生java MySql权限错误   安卓 JAVA按降序排序JSONObject(String,Int)   p:pdataTable/p:dataGrid/ui:repeat中的JavaP:commandButton不调用方法   用于服务器和客户端包的Java项目中的共享资源   哪些版本的Android SDK支持在哪些版本的Java中编码?   java如何使用selenium检查登录表单中的成功和失败消息?   eclipse如何重命名Java应用程序的名称空间/路径   安卓 java。你需要使用一个主题。此活动的AppCompat主题(或子代)   使用eclipse WindowBuilder和JCAJCE方法的java问题   java中的Documentum API